Ich benutze Guriddo jqGrid 5.2.1. Ich habe ein jsonReader
definiere das Nicht-Standardformat der Daten zu handhaben, indem die URL zurückgegeben wird:jqgrid: Problem mit beforeProcessing und loadonce
jsonReader : {
root:"payload.rows",
page: "payload.page", // the current page
total: "payload.total", // the total # of pages
records: "payload.records" // the total # of records
},
Das Gitter hat auch loadonce
Satz true
, so dass alle Daten einmal geladen wird. Dies ermöglicht es mir, dass das Gitter die Sortierung übernimmt, anstatt sortierte Daten vom Server anzufordern. Eines der Eingabefelder in den Zeilen ist ein Datum in Millisekunden. I definiert eine beforeProcessing
Funktion zu handhaben in jeder Zeile das Datum Umwandeln eines Wertes zu sein, der richtig formatiert werden können:
beforeProcessing: function (data) {
for(var i = 0; i < data.payload.rows.length; i++) {
var d = new Date(data.payload.rows[i].ihw);
data.payload.rows[i].ihw = d;
}
},
Dies hat gut funktioniert, wenn die Daten ursprünglich abgerufen. Allerdings habe ich festgestellt, dass beforeProcessing
aufgerufen wird, wenn ich auf eine Spalte zum Sortieren klicken, obwohl loadonce
auf true
festgelegt ist. Ich kann den Code ändern, um die Formatierung des Datums mit einer formatter
wie in this post zu behandeln. Ich habe jedoch andere Datenmanipulationsanforderungen, bei denen ich beispielsweise jeder Zeile, die eine Verkettung von drei anderen Feldern in der Zeile darstellt, ein neues Feld hinzufügen möchte. Wenn jsonReader
verwendet wird, scheinen die eingehenden Daten in das Standardformat jqgrid umgewandelt zu werden, so dass das nächste Mal beforeProcessing
(z. B. bei einer Sortierung) die Codefehler beforeProcessing
ausgeführt wird, da die Daten jetzt in einem anderen Format als zuvor vorliegen . Kann ich ein Ereignis verwenden, das nur einmal ausgeführt wird, nachdem die Daten ursprünglich vom Server abgerufen wurden? Oder muss ich eine JavaScrpt-Variable in beforeProcessing
festlegen, die angibt, dass die Daten einmal verarbeitet wurden, und Verarbeitung in nachfolgenden Aufrufen überspringen?
Es scheint, dass das Problem für kommerzielle spezifisch ist [Guriddo jqGrid JS] (http : //guriddo.net/?page_id=103334), die Sie verwenden. Weder [free jqGrid] (https://github.com/free-jqgrid/jqGrid) noch altes jqGrid (in Versionen <= 4.7) sollte das Problem haben. – Oleg
Wenn Sie weiterhin kommerzielle Guriddo jqGrid JS verwenden möchten, dann würde ich empfehlen, 'if (this.p.datatype ===" json ") {/ * die for-Schleife * /}' in den Code von 'einzufügen beforeProcessing'. Sie können einige Änderungen an den Daten vornehmen, die von * dem Server * zurückgegeben werden, bevor die Daten von jqGrid verarbeitet werden. – Oleg