我使用Guriddo jqGrid 5.2.1。我已經定義了一個jsonReader
來處理由URL返回的數據的非標準格式:jqgrid:與beforeProcessing和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
},
電網也有loadonce
設置爲true
,使得所有的數據被加載一次。這使我可以讓網格處理排序,而不是從服務器請求排序數據。行中的一個輸入字段是以毫秒錶示的日期。我所定義的beforeProcessing
函數來處理轉換的時間在每行中,以是能夠適當地格式化的值:
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;
}
},
當數據被初始檢索此工作得很好。不過,我注意到,只要我點擊一列進行排序,即使loadonce
設置爲true
,也會調用beforeProcessing
。我可以更改代碼以使用formatter
(如this post)中的日期來格式化日期。不過,我還有其他數據操作需求,例如,我想爲行中的其他三個字段串聯的每一行添加一個新字段。當使用jsonReader
時,輸入數據似乎會轉換爲標準的jqgrid格式,以便下一次執行beforeProcessing
(例如,在排序時)beforeProcessing
代碼錯誤,因爲現在數據的格式與以前不同。是否有一個事件我可以使用,只能運行一次,在數據最初從服務器中檢索後?或者我需要在beforeProcessing
中設置一個JavaScrpt變量,表示數據已經處理過一次,並且在後續調用中跳過處理?
看來這個問題是特定商業[Guriddo jqGrid的JS]設置相同的事件,以空(HTTP ://guriddo.net/?page_id = 103334),你使用。 [免費jqGrid](https://github.com/free-jqgrid/jqGrid)和舊版jqGrid(版本<= 4.7)都沒有問題。 – Oleg
如果你想繼續使用商業的Guriddo jqGrid JS,那麼我建議你在代碼中插入'if(this.p.datatype ===「json」){/ * for循環* /}'' beforeProcessing'。它允許您在jqGrid處理數據之前對從服務器*返回的數據進行一些修改。 – Oleg