jqgrid:与beforeProcessing和loadonce问题

问题描述:

我使用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变量,表示数据已经处理过一次,并且在后续调用中跳过处理?

+0

看来这个问题是特定商业[Guriddo jqGrid的JS]设置相同的事件,以空(HTTP ://guriddo.net/?page_id = 103334),你使用。 [免费jqGrid](https://github.com/free-jqgrid/jqGrid)和旧版jqGrid(版本 Oleg

+0

如果你想继续使用商业的Guriddo jqGrid JS,那么我建议你在代码中插入'if(this.p.datatype ===“json”){/ * for循环* /}'' beforeProcessing'。它允许您在jqGrid处理数据之前对从服务器*返回的数据进行一些修改。 – Oleg

当数据类型为本地时,旧代码在处理事件之前没有考虑到 - 这是修复此错误并将beforeProcessing添加到所有数据类型的原因。

由于选项loadonce设置为true,因此您将数据类型从json更改为local,但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; 
     } 
     this.p.beforeProcessing = null; 

    },