Вопрос не будет полным, если мы не упомянем об альтернативных методах для обхода объектов.
В настоящее время многие известные библиотеки JavaScript предоставляют свои собственные методы для итерации над коллекциями, то есть над массивов , объектов и в виде массива . Эти методы удобны в использовании и полностью совместимы с любым браузером.
jQuery.each()
. Его можно использовать для беспрепятственной итерации по обоим объектам и массивам: $.each(obj, function(key, value) {
console.log(key, value);
});
_.each()
, который выполняет итерацию по списку элементов, каждый из которых, в свою очередь, передается в заданную функцию (обратите внимание на порядок аргументов в функции iteratee !): _.each(obj, function(value, key) {
console.log(key, value);
});
_.forEach()
(или его псевдоним _.each()
) полезен для циклического перемещения по обоим объектам и массивам, однако (!) Объекты с свойством length
рассматриваются как массивы, и чтобы избежать такого поведения, предлагается использовать методы _.forIn()
и _.forOwn()
(они также имеют первый аргумент value
): _.forIn(obj, function(value, key) {
console.log(key, value);
});
_.forIn()
выполняет итерацию по и унаследовал перечислимые свойства объекта, тогда как _.forOwn()
выполняет итерацию только над собственными свойствами объекта (в основном проверяя функцию hasOwnProperty
). Для простых объектов и литералов объектов любой из этих методов будет работать нормально. Как правило, все описанные методы имеют одинаковое поведение с любыми поставленными объектами. Кроме того, использование нативного цикла for..in
обычно будет быстрее , чем любая абстракция, например jQuery.each()
, эти методы значительно проще в использовании, требуют меньше кодирования и обеспечивают лучшую обработку ошибок.
Я использовал этот метод: http://codeigniter.com/forums/viewthread/45709/#217816
Я также развернул его для установки cookie, базирующихся от вида поэтому, когда кто-то возвращается, таблица отсортирована то же как прежде.
Если Вы соглашаетесь с сортировкой на стороне клиента, плагин Tablesorter для jQuery довольно хорош.
Я столкнулся с этим с довольно сложной таблицей. Твердая часть была то, что таблица могла расти/уменьшать в зависимости от определенных переменных!! Большая боль :(
Вот то, как я обработал его..
Скорректированный system/application/config/config.php для разрешения символа запятой в URI:
$config['permitted_uri_chars'] = 'a-z 0-9~%.:_\-,';
Скорректируйте мой контроллер с функцией сортировки:
function sorter() {
//get the sort params
$sort = explode(",",$this->uri->segment(3)); //the 3rd segment is the column/order
//pass the params to the model
$data = $this->model_name->get_the_data($sort[0],$sort[1]);
$this->_show($data);
}
function _show($data) {
//all the code for displaying your table
}
Я упростил, но Вы получаете идею. Цель состоит в том, чтобы иметь URL как это:
/controller/sorter/columnname, порядок сортировки
Вызовы функции сортировщика другая внутренняя функция для контакта с логикой дисплея/шаблона/представления - это - задание, должен иметь дело с сортировкой, называют и получают соответствующие данные из модели.
Конечно, это могло быть уменьшено до просто Вашей текущей функции:
function showGrid() {
$sort = $this->uri->segment(3);
if ($sort) {
//get the data sorted
} else {
//get the data the default way
}
//rest of your view logic
}
Тем путем Вы даже не нуждаетесь в отдельной функции - и можете использовать третий сегмент для определения сортировки.
Я недавно добавил этого сортировщика Таблицы (который использует Прототип) к набору моих страниц. Это быстро и довольно легко реализовать.