这个问题源于我查看this的Oleg答案以及其中的演示网格。
gridComplete
:
在将所有数据加载到网格和所有其他数据后,将触发此操作 流程完成。此事件也是独立的 数据类型参数和排序后的分页等。
loadComplete
:
每个服务器请求后立即执行此事件。数据 响应中的数据取决于数据类型网格参数
从那些文档我明白gridComplete
在绘图网格结束时触发,loadComplete
在jqGrid完成与后端的通信后触发。
所以我想知道 - 为什么在演示中,loadComplete
用于更改单元格而不是gridComplete
?
答案 0 :(得分:26)
我认为jqGrid的许多用户都会问这个问题。所以知道答案很有意思。
我个人更喜欢使用loadComplete
。如果您检查我发布的所有示例中的代码,只有当原始海报在问题中发布时才会找到gridComplete
,我会修改一些代码。我更喜欢使用loadComplete
,因为loadComplete
的一些优点和gridComplete
的缺点。
以下是loadComplete
:
loadComplete
的参数data
代表本地数据的整页或从服务器加载的完整数据。另一方面gridComplete
将从内部updatepager
调用(在当前版本的jqGrid 4.4.4中)(请参阅here),其中将从delRowData
(请参阅here),addRowData
(请参阅here)和clearGridData
(请参阅here)方法;另外到addXmlData
(请参阅here)和addJSONData
(请参阅here)。这不是人们最想要的。
gridComplete
的另一个缺点是,可以查看是否检查addXmlData
的代码(请参阅here)和addJSONData
(请参阅here)从哪里调用 updatepager
,因此将调用gridComplete
。如果使用loadonce: true
,则内部参数data
和_index
将填充从服务器返回的完整数据。人们可以看到何时使用loadonce: true
;在从服务器加载第一页数据后,将调用回调 gridComplete
。此时data
和_index
仅包含该页面的数据。另一方面,在loadComplete
和data
中处理并保存本地保存的所有数据后,将稍后调用 _index
。
如果您从服务器加载数据,如果您不使用loadonce: true
选项,clearGridData
,addRowData
和delRowData
,那么您可以使用{{1}而不是gridComplete
。
答案 1 :(得分:3)
查看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
传递了额外的参数。
我可能还没有遇到微妙的差异......并且可能存在一个被调用而另一个没有被调用的情况,但我注意到在排序和分页时,两者都被调用。