Sollte man ersetzen die Verwendung addJSONData von jqGrid die Verwendung von setGridParam () und trigger('reloadGrid')?

Schrieb ich vor kurzem eine Antwort auf die Frage "jqGrid display-default "laden" - Meldung, wenn Aktualisierung einer Tabelle /auf benutzerdefinierte update". Beim schreiben der Antwort, die ich dachte,: warum nutzt er die addJSONData() Funktion zum aktualisieren von Daten in der grid-anstelle der änderung der URL mit Bezug auf setGridParam() und erfrischende jqGrid Daten mit Bezug auf trigger('reloadGrid')? Am Anfang wollte ich empfehlen, mit 'reloadGrid', aber nach zu denken, über diese habe ich verstanden, dass ich nicht ganz sicher bin, was der beste Weg ist. Mindestens, ich kann nicht erklären, in zwei Sätzen, warum ich lieber den zweiten Weg. Also habe ich beschlossen, dass es ein Interessantes Thema der Diskussion.

Also um genau zu sein: Wir haben eine typische situation. Wir haben eine web-Seite mit mindestens einem jqGrid und einige andere Steuerelemente, wie combo-Boxen (wählt), Checkboxen usw.. die geben dem Benutzer die Möglichkeiten, den Umfang zu ändern, die auf Informationen in jqGrid. In der Regel definieren wir einen event-handler wie jQuery("#selector").change(myRefresh).keyup(myKeyRefresh)
und wir brauchen, um neu zu laden die jqGrid-container basierend auf Benutzer Entscheidungen.

Nach zu Lesen und zu analysieren, die Informationen von zusätzlichen Benutzereingaben können wir aktualisieren die jqGrid container in mindestens zwei Möglichkeiten:

  1. Anruf von $.ajax() Bedienungsanleitung und dann darin Erfolg oder komplette Griff $.ajax nennen jQuery.parseJSON() (oder eval) und rufen Sie dann addJSONData Funktion von jqGrid. Ich fand eine Menge von Beispielen auf stackoverflow.com die Verwendung addJSONData.
  2. Update url von jqGrid basierend auf Benutzer-input, reset aktuelle Seite Zahl 1 ein, und ändern Sie Optional die Beschriftung des Rasters. All diese kann getan werden, mit Bezug auf setGridParam(), und Optional setCaption() jqGrid Methoden. Am Ende rufen Sie das raster trigger('reloadGrid') Funktion. Konstruieren Sie die url, übrigens verwende ich meistens jQuery.param-Funktion, um sicher zu sein, dass ich alle url-Parameter ordnungsgemäß verpackt mit Bezug auf alsterrunde.

Möchte ich uns zu diskutieren, die vor-und Nachteile beider Möglichkeiten. Derzeit nutze ich die zweite Möglichkeit ist, beginne ich mit den Vorteilen dieses ein.

Kann man sagen: ich nenne die vorhandenen Web-Service, konvertieren empfangenen Daten an den jqGrid-format und call - addJSONData. Dies ist der Grund, warum ich addJSONData Methode!

OK, ich werde wählen einen anderen Weg. jqGrid können einen Anruf tätigen, auf die Web-Service-direkt und füllen Sie die Ergebnisse innerhalb des Gitters. Es gibt eine Menge von jqGrid Optionen, die es Ihnen ermöglichen, diesen Prozess anzupassen.

Zuerst von allen, kann man löschen oder umbenennen, die keine standard-parameter an den server gesendet, mit Bezug auf die prmNames Möglichkeit, jqGrid oder fügen Sie mehrere zusätzliche Parameter mit Bezug auf die postData option (siehe http://www.trirand.com/jqgridwiki/doku.php?id=wiki:options). Kann man ändern, alle gebaut Parameter unmittelbar vor jqGrid macht die entsprechenden $.ajax Anfrage durch die Definition der serializeGridData() Funktion (eine weitere Möglichkeit, jqGrid). Mehr als das kann man ändern, jede $.ajax parameter, indem Sie den ajaxGridOptions Möglichkeit, jqGrid. Ich benutze ajaxGridOptions: {contentType: "application/json"} zum Beispiel als eine Allgemeine Einstellung des $.jgrid.defaults.
Die ajaxGridOptions option ist sehr mächtig. Mit Bezug auf die ajaxGridOptions option kann man neu definieren, jeden parameter $.ajax Anforderung von jqGrid, wie Fehler, komplette und beforeSend Veranstaltungen. Ich sehe potentiell interessant zu definieren dataFilter Veranstaltung in der Lage sein, änderungen in der Zeile der Daten, die vom server zurückgegeben.

Einen weiteren Grund für die Verwendung der trigger('reloadGrid') Weg ist die Blockierung von jqGrid während der AJAX-Anfrage verarbeiten. Meistens verwende ich den parameter loadui: 'block' zu blockieren, jqGrid während der JSON-Anfrage an den server senden. Mit Bezug auf jQuery blockUI plugin http://malsup.com/jquery/block/ kann man blockieren, mehr Teile der web-Seite als nur das raster. Dazu kann man nennen:

jQuery('#main').block({ message: '<h1>Die Daten werden vom Server geladen...</h1>' });

vor dem Aufruf der trigger('reloadGrid') Methode und jQuery('#main').unblock() innerhalb der loadComplete und loadError Funktionen. Die loadui option gesetzt werden konnte, um 'deaktivieren' in diesem Fall.

Und meine Letzte Bemerkung: ich habe Meistens verwendet, um zu erstellen, jqGrid mit der Datentyp auf 'local' statt 'json', und ich würde rufen Sie die trigger('change') Funktion einiger Steuerelemente (eine comboboxes) wie:
jQuery("#selector").change(myRefresh).keyup(myKeyRefresh).trigger('change').
So Baue ich die url parameter von jqGrid nur an einer Stelle im inneren der änderung handle, und ändern Sie Datentyp zu 'json' innerhalb der oben beschriebenen setGridParam().

Also ich sehe nicht, warum die Funktion addJSONData() sollte nie verwendet werden.

Kann jemand, der verwendet addJSONData () - Funktion erklären Sie mir die Vorteile Ihrer Verwendung?

Fair zu sein, ich kann hinzufügen, dass addJSONData (), die es in älteren Versionen von jqGrid so dass die meisten der features, die ich hier beschreibe. Sollte man ersetzen, die Verwendung von addJSONData von jqGrid die Verwendung von setGridParam(), und trigger('reloadGrid')?

InformationsquelleAutor Oleg | 2010-04-17
Schreibe einen Kommentar