[英]What the difference between loadComplete and gridComplete events?
我认为jqGrid的许多用户都会问这个问题。 所以知道答案很有意思。
我个人更喜欢使用loadComplete
。 如果您检查我发布的所有示例中的代码,只有当原始海报在问题中发布时才会找到gridComplete
,我会修改一些代码。 我更喜欢使用loadComplete
的,因为一些优势loadComplete
和缺点gridComplete
。
以下是loadComplete
优点:
loadComplete
具有参数data
,表示本地数据的整页或从服务器加载的完整数据。 在另一边gridComplete
将调用(jqGrid的4.4.4的最新版本)从内部updatepager
(见这里 ),这将被称为delRowData
(见这里 ), addRowData
(见这里 )和clearGridData
(见这里 )方法; 除了 addXmlData
(见这里 )和addJSONData
(见这里 )。 这不是人们最想要的。
gridComplete
另一个缺点是可以看到是否检查了addXmlData
的代码(请参阅此处 )和addJSONData
(请参阅此处 ) ,其中调用了updatepager
,因此将调用gridComplete
。 如果使用loadonce: true
,则内部参数data
和_index
将填充从服务器返回的完整数据。 在使用loadonce: true
时可以看到loadonce: true
; 从服务器加载第一页数据后,将调用回调gridComplete
。 此时data
和_index
仅包含页面的数据。 另一方面,在处理完从服务器返回的所有数据并将其本地保存在data
和_index
之后,将调用loadComplete
。
如果从服务器加载数据,如果不使用loadonce: true
选项, clearGridData
, addRowData
和delRowData
则可以使用gridComplete
而不是loadComplete
。
查看jqGrid (source)的源代码,您可以看到gridComplete仅在grid.base的一行上调用。
1725: if($.isFunction(ts.p.gridComplete)) {ts.p.gridComplete.call(ts);}
这一行来自updatePager
函数。
您可以在populate
函数中找到loadComplete
(第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
传递了一个额外的参数。
我可能还没有遇到过细微的差别......而且可能会出现一个被调用而另一个没有被调用的情况,但我注意到在排序和分页时,都会被调用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.