2010-10-03 8 views
6

Ich muss userData zu jqgrid übergeben, kann aber keine Beispiele finden, wie dies zu tun ist. Hier ist mein Versuch:Wie man userData in jqgrid liest?

vom Server gesendet:

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

und in jqGrid:

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

Wie kann ich userData senden und es von jqGrid lesen?

EDIT: Ich weiß, dass meine userData gesendet wird, weil ich es in Fiddler sehen kann. Ich denke, dass ich nur daran festhalte, wie man es auf der Client-Seite liest.

Antwort

16

Im Allgemeinen ist die Verwendung von userData ist ziemlich einfach. jqGrid bietet Ihnen Unterstützung für das Senden zusätzlicher Daten vom Server , die zusammen mit den jqGrid-Daten gespeichert werden. Wenn also jqGrid die vom Server zurückgegebenen Daten analysiert, sucht es nur nach userdata (nicht für userData !!!) und speichert den internen Parameter userData.

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

Seien Sie vorsichtig: die Standardeigenschaft in den Eingangsdaten userdata und NICHTuserData wie Sie derzeit sein müssen. Sie können den Standardnamen der Eingabeeigenschaft jsonReader: {userdata: "userData"} oder jsonReader: {userdata: "myData"} überschreiben, wenn Sie userData oder myData als Eigenschaftsname mit Ihrer additional data verwenden.

Eine von der Standardverwendung von userData ist für displaying of the footer im jqGrid. Sie können die Daten für Ihre anderen Vorschläge verwenden. In another answer wird gezeigt, wie userData verwendet wird, um einige Zeilen/Zeilen direkt nach dem Laden von Daten vom Server auszuwählen.

Wenn Sie loadonce:true-Parameter verwenden, die Verwendung von userData wird eine wenig komplizierter sein, weil nach der ersten Belastung der Daten aus dem Parameter userData werden gelöscht, so dass Sie es im äußeren Objekt zu speichern haben.

Aus Grund können Sie die userData in Bezug auf jQuery("#grid").getGridParam('userData') nur zugreifen, nachdem die Daten geladen sind. Sie sollten dies also innerhalb von loadComplete Event-Handle oder später tun. Innerhalb von loadComplete Event-Handle können Sie auf alle Daten zugreifen, die Ihnen vom Server über data Parameter von loadComplete Ereignis gesendet werden. So können Sie weitere zusätzliche Daten lesen und dort speichern.

+1

Danke.Für den Fall, dass jemand das später liest, ist die Zusammenfassung, dass es sich bei einem GridParam um "userData" handelt, ansonsten um "userdata". Lesen Sie 'userdata' im Event-Handler' loadComplete'. Um 'postData' mit' userdata' zu setzen, gehen Sie wie folgt vor: 'loadComplete: function (data) {jQuery (" # ticketlist "). SetGridParam ({postData: {foo2: data.userdata.foo}});}' – royco

+0

@Slack : Sie können auch 'jQuery (" # grid ") verwenden. GetGridParam ('userData')' innerhalb von 'loadComplete' wie' loadComplete: function() {jQuery ("# ​​ticketlist"). SetGridParam ({postData: {foo2: jQuery ("# ​​grid"). getGridParam ('userData'). foo}});} '. Es ist nur wichtig zu verstehen, dass in den vom Server gesendeten Daten 'userdata' abgelegt werden müssen und die Daten im' userData' Parameter von jqGrid gespeichert werden. So kann es über 'getGridParam ('userData') 'zugänglich sein. Aber das wichtigste, dass jetzt dein Programm funktioniert und kann 'userdata' /' userData' verwenden. :-) – Oleg

+0

Mann Ich benutze userData anstelle von userdata im JSON-Generator und ich bin verrückt geworden, vielen Dank! +1 – Neo

1

jqGrid akzeptiert standardmäßig JSON in diesem Format.

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

und die jqGrid Optionen einrichten Sie so etwas tun würde:

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

Danke für Ihren Beitrag. Ich habe tatsächlich jqgrid funktioniert gut und kann Zeilen ohne ein Problem anzeigen. Ich habe diesen Code weggelassen. Was ich nicht verstehe ist, wie man jqgrids 'userData'-Funktion benutzt. Auf diese Weise können Sie ein Array mit Benutzerdaten vom Server an das Raster senden. – royco