loadComplete和gridComplete事件有什么区别?

这个问题起源于我看了这个 奥列格和演示网格的答案。

gridComplete

所有的数据加载到网格后,所有其他进程完成后触发。 此外,事件触发独立于数据types参数和sorting寻呼等。

loadComplete

每个服务器请求后立即执行此事件。 数据来自响应的数据取决于数据types网格参数

从那个文档中,我明白了gridComplete在绘制网格结束时触发,并且在jqGrid完成与后端的通信之后, loadComplete触发。

所以我不知道 – 为什么在演示中, loadComplete用于更改单元格颜色而不是gridComplete

我认为这个问题是由jqGrid的许多用户问的。 所以知道答案很有意思。

我个人更喜欢使用loadComplete 。 如果您检查我发布的所有示例中的代码,只有在原始海报发布到问题中时才会发现gridComplete ,我将修改一些代码。 我更喜欢使用loadComplete因为loadComplete的一些优点和gridComplete缺点。

这里是loadComplete优点:

  • 这是最后一个callback,如果整个网格体将被重新加载,将被调用。 例如在从服务器加载网格页面之后。 重要的是要明白,如果用户更改某列的sorting或设置filter或select另一个网格的页面; 栅格体将被重新加载。
  • loadComplete具有参数data ,它代表从服务器加载的本地数据或完整数据的整页。

另一方面,gridComplete将从内部的updatepager (见这里 )被调用(在当前版本的jqGrid 4.4.4中), 它将从delRowData (请参见这里 ), addRowData (请参见这里 )和clearGridData (请参阅这里 )方法; 除了 addXmlData (见这里 )和addJSONData (请看这里 )。 这不是主要想要的。

gridComplete另一个缺点是可以看到是否addXmlData的代码(参见这里 )和addJSONData (参见这里 ) updatepager从哪里调用的,所以gridComplete将被调用。 如果使用loadonce: true ,则内部参数data_index将被从服务器返回的完整数据填充。 你可以看到什么时候使用loadonce: true ; callbackgridComplete将在从服务器加载数据的第一页之后调用 。 此时data_index只包含页面的数据。 另一方面,在从服务器返回的所有数据在本地处理并保存data_index 之后,将稍后调用loadComplete

如果你从服务器加载数据,如果你不使用loadonce: true选项, clearGridDataaddRowDatadelRowData那么你可以使用gridComplete而不是loadComplete

看看jqGrid (源代码)的来源,你可以看到gridComplete只是在grid.base的一行上调用的。

1725: if($.isFunction(ts.p.gridComplete)) {ts.p.gridComplete.call(ts);}

这行来自函数updatePager

你可以在populate函数中findloadComplete (1757行)。 不像gridComplete ,它传递一个额外的参数。 这两个callback都会收到this的引用,但loadComplete也会接收从服务器返回的数据(或者本地传递):

 1858: case "xmlstring": if(lcf) {ts.p.loadComplete.call(ts,dstr);} 1869: case "jsonstring": if(lcf) {ts.p.loadComplete.call(ts,dstr);} 1881: case "local": case "clientside": if(lc) { lc.call(ts,req); } 

事情是,functionpopulateupdatePager经常发生在一起,所以你看到,当sorting和分页,这两个callback被称为。 不同之处在于, loadComplete传递了一个额外的参数。

有可能是细微的差异,我还没有遇到过…有可能是一个被调用,另一个不是,但我已经注意到,在sorting和分页,都被称为。