jqGrid - Пользовательская фильтрация работает, но не после повторного открытия сетки в модальном окне. - PullRequest
0 голосов
/ 14 февраля 2012

У меня есть пользовательская функция фильтрации, она передает собственный URL-адрес и перезагружает данные сетки с помощью:

function filter_grid(filter) {
    grid = $(filter).parents('.ui-jqgrid-view').find('.grid');
    /* build the url in here*/
    $(grid).setGridParam({loadonce:false, datatype:'json'});
    jQuery(grid).setGridParam({url:myurl}).trigger("reloadGrid");
    $(grid).setGridParam({loadonce:true});
}

Это работает нормально и фильтрует данные, как и ожидалось.Однако я разрешаю пользователю открывать сетку в модальном окне, и это также будет работать при первом открытии модального окна , но , если вы затем закроете окно и снова откроете его ... фильтрация не удалась.Я не вижу ошибок в консоли ... просто перезагрузка никогда не происходит.Любые предложения?


Уточнение

В двух словах есть меню выбора, прикрепленное к каждой сетке.Вы можете выбрать опцию в этом меню, и она перезагрузит сетку с отфильтрованными данными с помощью функции filter_grid.Он перезагружается путем перезагрузки сетки с новым URL-адресом, который передает некоторые параметры для фильтрации данных.

В событии gridComplete я добавляю элемент ввода select (который я заполню позже) к каждой сетке на странице.У каждого из них есть класс «фильтра»:

$("#grid1 .ui-jqgrid-titlebar:eq(1)").append("<select id='pdd_user' name='filter_user' class='category_select filter'><option value=''>All</option></select>")

Я наблюдаю за кликами в классе фильтра:

$('.filter').live('change', function() {
        filter_grid(this);
    });

, который вызывает функцию filter_grid (ту, которую я включил вышес первым редактированием моего вопроса), как вы можете видеть, и это то, что заполняет сетку отфильтрованными данными:

jQuery(grid).setGridParam({url:myurl}).trigger("reloadGrid"); 

Я установил ее в loadonce: false, потому что сетка была установлена ​​в loadonce:Значение true, когда оно было изначально создано (для целей локальной сортировки), поэтому я установил для него значение loadonce: false, перезагрузите сетку с новыми URL-адресами и параметрами, а затем снова установите для нее значение loadonce: true, чтобы снова включить локальную сортировку.

1 Ответ

1 голос
/ 14 февраля 2012

Я не до конца понимаю ваш вопрос, но надеюсь, вы могли бы помочь вам найти, что не так в вашем коде. Я думаю, что вы должны удалить все манипуляции с опцией loadonce jqGrid . Это ненужно и опасно. Чтобы перезагрузить сетку с данными сервера, вам нужно просто установить datatype на 'json' и перезагрузить сетку с .trigger("reloadGrid", [{page: 1, current: true}]); (подробности см. здесь ). Параметр current: true помогает удерживать выбранную строку, если она будет найдена в сетке после перезагрузки. Параметр page: 1 может помочь в случае, если вы используете пейджинг данных. Если пользователь, например, выбрал вторую страницу, а затем будет запущен reloadGrid, он запросит сервер загрузить и вторую страницу отфильтрованных результатов . Таким образом, в пейджере может быть пустая сетка и страница № 2. Сброс номера страницы до 1 либо по setGridParam, либо по описанному выше параметру reloadGrid помогает в случаях.

Проблема с настройкой loadonce: false может быть, если перезагрузка сетки будет обработана до того, как вы установите loadonce: true. В случае, если никакие локальные данные не будут заполнены в сетке. Таким образом, опция loadonce: true должна быть установлена ​​постоянно.

Я рекомендую вам дополнительно прочитать этот ответ , если вы используете подкачку на стороне сервера с локальной сортировкой данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...