Нужно заменить использование addJSONData jqGrid к использованию setGridParam (), и триггер ('reloadGrid')?

Я недавно записал ответ на вопрос "jqGrid сообщение “загрузки” значения по умолчанию дисплея при обновлении таблицы / на пользовательском обновлении". При записи ответа я думал: почему он использует addJSONData () функция для обновляющих данных в сетке вместо того, чтобы изменить URL относительно setGridParam () и обновить jqGrid данные относительно триггера ('reloadGrid')? Вначале я хотел рекомендовать использовать 'reloadGrid', но после размышления об этом я понял, что я не совсем уверен, каков лучший способ. По крайней мере, я не могу объяснить в двух предложениях, почему я предпочитаю второй путь. Таким образом, я решил, что это мог быть интересный предмет обсуждения.

Таким образом быть точным: у Нас есть типичная ситуация. У нас есть веб-страница по крайней мере с одним jqGrid, и некоторые другие средства управления как поля комбинированного списка (выбирает), флажки и т.д., которые дают пользовательские возможности изменить объем на информации, отображенной в jqGrid. Обычно мы определяем некоторый обработчик событий как jQuery("#selector").change(myRefresh).keyup(myKeyRefresh) и мы должны перезагрузить jqGrid контейнер на основе выбора пользователя.

После чтения и анализа информации от входа дополнительного пользователя мы можем обновить jqGrid контейнер по крайней мере двумя способами:

  1. Выполните вызов $.ajax() руководство и затем в успехе или полном дескрипторе $.ajax звонить jQuery.parseJSON() (или eval) и затем вызовите addJSONData функцию jqGrid. Я нашел много примеров на stackoverflow.com, который использует addJSONData.
  2. URL обновления jqGrid на основе входа пользователя, сброс текущий номер страницы к 1 и дополнительно изменяет подпись сетки. Все они могут быть сделаны относительно setGridParam (), и дополнительно setCaption () jqGrid методы. В конце называют триггер сетки ('reloadGrid') функцией. Создать URL, по тому, как я использую главным образом jQuery.param функцию, чтобы быть уверенным, что у меня есть все параметры URL, упакованные правильно относительно encodeURIComponent.

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

Можно сказать: Я называю существующий веб-сервис, преобразовываю полученные данные в jqGrid формат и называю addJSONData. Это - причина, почему я использую addJSONData метод!

Хорошо, я выберу иначе. jqGrid может сделать запрос к веб-сервису непосредственно и заполнить результаты в сетке. Существует много jqGrid опций, которые позволяют Вам настраивать этот процесс.

В первую очередь, можно удалить или переименовать любой стандартный параметр, отправленный на сервер относительно prmNames опции jqGrid, или больше добавлять дополнительные параметры относительно опции постданных (см. http://www.trirand.com/jqgridwiki/doku.php?id=wiki:options). Можно сразу изменить все созданные параметры, прежде чем jqGrid сделает соответствие $.ajax запрос путем определения serializeGridData () функции (еще одна опция jqGrid). Больше, чем это, можно изменить каждый $.ajax параметр путем установки ajaxGridOptions опции jqGrid. Я использую ajaxGridOptions: {contentType: "application/json"} например, как общая установка $.jgrid.defaults. ajaxGridOptions опция очень мощна. Относительно ajaxGridOptions опции можно переопределить любой параметр $.ajax запрос, отправляющий jqGrid, как ошибка, завершается и beforeSend события. Я вижу потенциально интересный определить dataFilter событие, чтобы смочь сделать любую модификацию данных строки возвращенной из сервера.

Еще один аргумент в пользу использования триггера ('reloadGrid') путь блокируется jqGrid во время обработки запросов Ajax. Главным образом я использую параметр loadui: 'block' заблокировать jqGrid во время запроса JSON, отправляющего к серверу. Относительно плагина jQuery blockUI http://malsup.com/jquery/block/ можно заблокировать больше частей веб-страницы как сетка только. Чтобы сделать этот может звонить:

jQuery('#main').block({ message: '

Die Daten werden vom Server geladen...

' });

прежде, чем назвать триггер ('reloadGrid') методом и jQuery ('#main') .unblock () в функциях loadError и loadComplete. loadui опция могла быть установлена 'отключить' в этом случае.

И мой последний комментарий: Главным образом я раньше создавал jqGrid с набором типа данных к 'локальному' вместо 'json', и я назову триггер ('изменение') функцией некоторых средств управления (одно из полей комбинированного списка) как: jQuery("#selector").change(myRefresh).keyup(myKeyRefresh).trigger('change'). Таким образом я создаю параметр URL jqGrid только в одном месте в дескрипторе изменения, и тип данных изменения к 'json' в вышеупомянутом описал setGridParam ().

Таким образом, я не вижу, почему функция addJSONData () должна когда-либо использоваться.

Может кто-то, кто использует addJSONData (), функция объясняет мне преимущества своего использования?

Для ярмарки, я могу добавить, что addJSONData (), который существует в более старых версиях jqGrid как имеющий большинство функций, которые я описываю здесь. Нужно заменить использование addJSONData jqGrid к использованию setGridParam (), и триггер ('reloadGrid')?

28
задан Community 23 May 2017 в 12:00
поделиться