【发布时间】:2017-08-02 04:44:29
【问题描述】:
我正在使用 Guriddo jqGrid 5.2.1。我定义了一个 jsonReader 来处理 URL 返回的数据的非标准格式:
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;
}
},
最初检索数据时,这工作得很好。但是,我注意到每当我单击要排序的列时都会调用beforeProcessing,即使loadonce 设置为true。我可以更改代码以使用formatter 处理格式化日期,例如this post。但是,我还有其他数据操作需求,例如,我想向每一行添加一个新字段,该字段是该行中其他三个字段的串联。当使用jsonReader 时,传入的数据似乎被转换为标准的jqgrid 格式,因此下次执行beforeProcessing 时(例如,在排序时),beforeProcessing 代码错误,因为数据现在是与以前不同的格式。在最初从服务器检索数据之后,是否有一个我可以使用的事件只运行一次?还是需要在beforeProcessing中设置一个JavaScrpt变量,表示数据已经处理过一次,在后续调用中跳过处理?
【问题讨论】:
-
看来问题是特定于您使用的商业Guriddo jqGrid JS。 free jqGrid 和旧的 jqGrid(版本
-
如果你想继续使用商业Guriddo jqGrid JS,那么我建议你在
beforeProcessing的代码中插入if (this.p.datatype === "json") {/*the for loop*/}。它允许您在 jqGrid 处理数据之前对从服务器返回的数据进行一些修改。
标签: jqgrid