2015-10-04 3 views
2

Я ищу лучший способ хранения данных в строке. Я нашел рабочий путь с использованием скрытых столбцов (hidden: true в colModel), но этот параметр все равно будет создавать узлы DOM для скрытых ячеек, и это кажется для меня пустой тратой. Есть ли лучший способ?Сохранять связанные данные строки?

ответ

1

Прежде всего, необходимо указать как использовать jqGrid. Если вы используете datatype: "local", вам не нужно создавать скрытые столбцы. Вместо того, что входные данные могут содержит элементы как

{ id: 123, name: "item name", price: 45.67, 
    orders: [ 
     { total: 1543.54, data: "2015-10-02" } 
     { total: 1633.71, data: "2015-10-01" } 
    ] } 

и orders массив будет сохранен в data массиве как часть каждого элемента. Другими словами, вы можете сохранить любое количество дополнительных свойств любого типа, которые будут сохранены в локальных данных. Для получения всех данных можно использовать метод getLocalRow. Например, можно использовать что-то вроде $("#grid").jqGrid("getLocalRow", "123"), чтобы получить данные, связанные с строкой, имеющей id = «123».

Если используется datatype: "json" и загружает данные с сервера, то вы можете использовать другие параметры. Свободный jqGrid 4.9 и выше поддерживает параметр additionalProperties. Поэтому вместо создания скрытых столбцов prop1 и prop2, которые существуют во входных данных, вы можете просто использовать additionalProperties: ["prop1", "prop2"]. Он информирует jqGrid для чтения данных со входа. Можно использовать немного более сложные для объектов additionalProperties, чтобы читать более сложные данные и связывать их со строкой. Основное преимущество использования additionalProperties: указанные свойства доступны в пользовательских форматировщиках, и свойства будут сохранены локально, если вы используете loadonce: true.

Если кто-то использовал TreeGrid то можно увидеть множество скрытых столбцов (level, parent, isLeaf, expanded, loaded, icon), которые сохраняются дополнительно в локальных данных. Скрытые столбцы не использовались внутренне со многих версий jqGrid. Начиная с версии 4.9 бесплатный jqGrid не создает ненужные столбцы и делает DOM страницы короче. Бесплатный jqGrid использует additionalProperties в корпусе (см. the wiki article).

В настоящее время невозможно перейти на бесплатный jqGrid, тогда можно использовать другое обходное решение. Для сохранения дополнительной информации, связанной с сеткой, можно использовать userdata. Можно либо включить userdata непосредственно в ответ сервера со всей необходимой информацией, либо использовать обратный вызов beforeProcessing для синтаксического анализа входных данных и заполнить дополнительные до входные данные будут проанализированы jqGrid. Я рекомендую прочитать the old answer для соответствующего примера кода. Основная идея заключается в построении userdata в виде карты по rowid. Элементы карты должны содержать дополнительные свойства:

userdata: { 
    /* properties of userdata could be the rowids */ 
    123: { 
     /* the data could contains the object with additional properties */ 
     orders: [ 
      { total: 1543.54, data: "2015-10-02" } 
      { total: 1633.71, data: "2015-10-01" } 
     ] 
    } 
} 

Это позволяет использовать

var addProp = $(this).jqGrid("getGridParam", "userData"); 

и получить доступ к дополнительному использованию свойств addProp[rowid].orders.

+0

Спасибо за подробный ответ. Я загружаю данные с сервера с использованием json-типа данных. Я не мог найти никаких документов о опции «дополнительные свойства». И вообще, я использую jqgrid 4.6.0 на данный момент. Поэтому параметр userdata кажется лучшим для меня. Благодаря! – user3599803

+0

@ user3599803: Добро пожаловать! Опция 'AdditionalProperties' существует начиная с версии 4.9 бесплатного jqGrid. Я включил ссылку в [wiki article] (https: // github.com/free-jqgrid/jqGrid/wiki/AdditionalProperties-option-make-unneeded-hidden-columns-in-local-сценарий) и описал вариант в моем ответе. Если вы используете старую версию jqGrid (4.6.0), то у нее нет такой опции, и вы должны использовать 'userData', например. – Oleg

+0

Я искал в документах здесь и не нашел - http://www.trirand.com/jqgridwiki/doku.php?id=wiki:jqgriddocs – user3599803

Смежные вопросы