Как запретить jqgrid изначально загружать данные?

У меня есть страница, на которой есть пара jqGrids, а также несколько других полей. Я хочу сделать себе один вызов AJAX, который возвращает объект JSON, содержащий данные, которые следует использовать для заполнения всей страницы.

Итак, я хотел бы позвонить сам, заполнить «другие поля», а затем вытащить пару коллекций из основного возвращенного объекта JSON и заполнить этими коллекциями каждую из jqGrids «вручную».

У меня так много работы, но я не могу заставить jqGrid прекратить попытки выполнить сам запрос AJAX. Разве не должен быть способ указать jqGrid НЕ пытаться выполнить вызов AJAX при его инициализации?

Я нашел здесь похожий вопрос: Как запретить jqgrid изначально загружать данные ?

Но у меня нет варианта, который бы решил эту проблему для плаката.

Мне кажется довольно логичным, что некоторые люди могут захотеть использовать этот плагин без попытки таблицы получить свои собственные данные при инициализации. Мне где-то не хватает опции в документации (wiki - options)?

Спасибо.


person Steve    schedule 30.04.2010    source источник


Ответы (1)


Есть простой способ сказать, что jqGrid не загружает данные. Вы должны использовать datatype: 'local' как параметр jqGrid. Этот вариант означает, что вы планируете самостоятельно заполнить данные сетки такими функциями, как addRowData или addJSONData (см. Пример на параметр jqGrid tableToGrid options). Вы также можете заполнить данные в сетке внутри обратного вызова loadComplete, потому что jqGrid вызывает эту функцию также в случае datatype: 'local'.

Не забывайте, что данные, которые вы указываете как параметр addJSONData, будут прочитаны (проанализированы) с использованием jsonReader и jsonmap. Это дает вам удобный способ не сильно манипулировать данными, полученными с сервера. Вместо этого достаточно указать только правильное отображение данных в jsonmap для jqGrid. Относительно сложный пример сопоставления данных вы найдете в Сопоставление данных JSON в JQGrid .

Если вы думаете об оптимизации передачи данных, посмотрите раздел «Отображение данных» \ «Оптимизация данных» в http://trirand.com/blog/jqgrid/jqgrid.html демонстрационная страница. Идея состоит в том, чтобы заменить структуру данных, представленную строками таблицы, на массив строк. Тогда никакие имена столбцов (имена полей структуры) не будут отправляться с сервера на клиент, который сжимает передачу данных. С такой оптимизацией вы, вероятно, сможете сэкономить гораздо больше времени, чем с другими способами. Не забудьте включить сжатие данных на веб-сервере. Это также может значительно уменьшить размер передаваемых данных.

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

person Oleg    schedule 30.04.2010
comment
Спасибо за предложения. «Локальный» тип данных работал прекрасно. Далее я собирался взглянуть на jsonReader и jsonmap. Я ценю ссылку. - person Steve; 01.05.2010