2010-10-03 5 views
6

Мне нужно передать userData в jqgrid, но не можете найти примеры того, как это сделать. Вот моя попытка:Как читать userData в jqgrid?

Отправленные с сервера:

{ total: 25, 
    page: currentpage, 
    userData: {foo: 'bar'}, 
    rows: myRows } 

и jqgrid:

var data = jQuery("#grid").getGridParam('userData'); 

Как я могу отправить userData и прочитать его от jqgrid?

EDIT: Я знаю, что мой userData отправляется, потому что я вижу его в Fiddler. Я думаю, что я просто зациклился на том, как читать его на стороне клиента.

ответ

16

В целом использование userData довольно просто. jqGrid дает вам поддержку для отправки с сервера любых дополнительных данных , которые будут сохранены вместе с данными jqGrid. Поэтому, если jqGrid анализирует данные, возвращаемые с сервера, тогда он просто ищет userdata (не для userData !!!) и сохранить во внутреннем параметре userData.

{ "total":25, 
    "page":1 
    "records":107, 
    "userdata": {"foo": "bar"}, 
    "rows": [...] } 

Будьте осторожны: свойство по умолчанию во входных данных должны быть userdata и НЕuserData, как вы в настоящее время. Вы можете переписать имя свойства ввода по умолчанию jsonReader: {userdata: "userData"} или jsonReader: {userdata: "myData"}, если вы используете userData или myData в качестве имени свойства с вашим additional data.

Один из стандартных использования userData предназначен для displaying of the footer в jqGrid. Вы можете использовать данные для любого другого предложения. В another answer показано, как использовать userData для выбора некоторых строк/строк непосредственно после загрузки данных с сервера.

Если вы используете loadonce:true параметр, использование userData будет немного сложнее, потому что после первой загрузки будут удалены данные из параметра userData, так что вы должны сохранить там во внешнем объекте.

Вы можете получить доступ к userData по отношению к jQuery("#grid").getGridParam('userData') только после того, как данные будут загружены. Поэтому вы должны сделать это внутри дескриптора события loadComplete или позже. Кстати, внутри дескриптора события loadComplete вы можете получить доступ к всем данным, которые отправляются вам с сервера через data параметр loadComplete. Таким образом, вы можете прочитать любые другие дополнительные данные и сохранить там где-нибудь.

+1

Спасибо.В случае, если кто-нибудь прочтет это позже, резюме состоит в том, что при разговоре о GridParam это 'userData', иначе это' userdata'. Прочитайте 'userdata' в обработчике события loadloadplete. Чтобы установить 'postData' с' userdata', выполните следующие действия: 'loadComplete: function (data) {jQuery (" # ticketlist "). SetGridParam ({postData: {foo2: data.userdata.foo}};}' – royco

+0

@Slack : Вы также можете использовать 'jQuery (« # grid »). GetGridParam ('userData')' внутри 'loadComplete' как' loadComplete: function() {jQuery ("# ​​ticketlist"). SetGridParam ({postData: {foo2: jQuery ("# ​​grid"). getGridParam ('userData'). foo}});} '. Важно только понимать, что при отправке данных с сервера нужно поместить 'userdata', и данные будут сохранены в параметре userData' jqGrid. Таким образом, он может быть доступен через getGridParam ('userData') '. Но самое главное, что теперь ваша программа работает и может использовать 'userdata' /' userData'. :-) – Oleg

+0

man Я использую userData вместо userdata в генераторе json, и я схожу с ума, большое спасибо! +1 – Neo

1

jqGrid по умолчанию принимает JSON в этом формате.

{"rows": 
    [{"foo":"bar"}] 
} 

и настройке jqgrid варианты вы могли бы сделать что-то вроде этого:

$("#cashflow-sheet").jqGrid({ 
    url:'bbc-json.html', 
    datatype: "json", 
     ... 
+0

Спасибо за сообщение. У меня на самом деле jqgrid работает нормально и может отображать строки без проблем. Я пропустил этот код. Я не понимаю, как использовать функцию 'userData' jqgrid. Это позволяет отправлять массив пользовательских данных с сервера на сетку. – royco

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