loadComplete 和 gridComplete 事件有什么区别?
我认为 jqGrid 的许多用户都问过这个问题。所以知道答案很有趣。
我个人更喜欢使用loadComplete
. 如果您检查我发布的所有示例中的代码,您会发现gridComplete
只有当原始海报将其发布在问题中时,我才会修改一些代码。我更喜欢使用loadComplete
的原因的一些优点loadComplete
和缺点gridComplete
。
以下是优点loadComplete
:
- 如果整个网格体将被重新加载,它将是最后一个回调。例如在从服务器加载网格上的页面之后。重要的是要了解,如果用户更改某些列的排序或设置过滤器或选择网格的另一页;网格体将被重新加载。
loadComplete
具有data
代表本地数据的完整页面或从服务器加载的完整数据的参数。
另一方面gridComplete
将被调用(在当前版本的 jqGrid 4.4.4 中)从内部updatepager
(见这里),它将从delRowData
(见这里)、addRowData
(见这里)和clearGridData
(见这里)方法调用;除了到addXmlData
(见这里)和addJSONData
(见这里)。这不是人们最想要的。
另一个缺点是gridComplete
可以查看是否检查addXmlData
(see here ) 和addJSONData
(see here ) from where 的代码,updatepager
因此gridComplete
将被调用。如果使用loadonce: true
和内部参数data
,_index
将填充从服务器返回的完整数据。使用时可以看到loadonce: true
;gridComplete
从服务器加载第一页数据后将调用回调。此时data
,_index
只包含页面的数据。在loadComplete
从服务器返回的所有数据被处理并本地保存在data
和之后,另一端将稍后调用_index
。
如果从服务器加载数据,而如果你不使用loadonce: true
选项,clearGridData
,addRowData
和delRowData
那么你可以使用gridComplete
的替代loadComplete
。
查看jqGrid的源码(source)可以看到gridComplete只在grid.base的一行调用。
1725: if($.isFunction(ts.p.gridComplete)) {ts.p.gridComplete.call(ts);}
这一行来自函数updatePager
.
您可以loadComplete
在populate
函数中找到(第 1757 行)。与 不同gridComplete
,它传递了一个额外的参数。两个回调都接收对 的引用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); }
问题是,这些函数populate
和updatePager
经常同时发生,所以你会看到在排序和分页时,两个回调都被调用。区别再次loadComplete
在于传递了一个额外的参数。
可能存在我尚未遇到的细微差异……并且可能存在调用一个而另一个未调用的情况,但我注意到在排序和分页时,两者都被调用。