loadComplete 和 gridComplete 事件有啥区别?
Posted
技术标签:
【中文标题】loadComplete 和 gridComplete 事件有啥区别?【英文标题】:What the difference between loadComplete and gridComplete events?loadComplete 和 gridComplete 事件有什么区别? 【发布时间】:2013-03-04 10:50:20 【问题描述】:这个问题是在我查看了Oleg 的this 答案和其中的demo-grids 之后产生的。
gridComplete
:
这会在所有数据加载到网格和所有其他数据后触发 流程完成。该事件也独立于 数据类型参数和排序后分页等。
loadComplete
:
此事件在每次服务器请求后立即执行。数据 来自响应的数据取决于数据类型网格参数
从该文档中,我了解到gridComplete
在绘制网格结束时触发,loadComplete
在 jqGrid 完成与后端的通信后触发。
所以我想知道 - 为什么在演示中,loadComplete
用于更改单元格的颜色而不是 gridComplete
?
【问题讨论】:
如果不熟悉 loadComplete 和 gridComplete 属性之间的区别,我会假设 loadComplete 会加载所有数据、样式、布局和间距,而 gridComplete 只是从 loadComplete 方法中获取数据和渲染视图中的网格。 【参考方案1】:我认为这个问题是 jqGrid 的许多用户提出的。所以知道答案很有趣。
我个人更喜欢使用loadComplete
。如果您检查我发布的所有示例中的代码,您会发现 gridComplete
只有当原始海报在问题中发布它并且我会修改一些代码时。我更喜欢使用loadComplete
,因为loadComplete
的一些优点和gridComplete
的缺点。
以下是loadComplete
的优势:
loadComplete
有参数data
代表本地数据的完整页面或从服务器加载的完整数据。
另一方面,gridComplete
将从内部updatepager
(参见here)调用(在当前版本的 jqGrid 4.4.4 中),将从delRowData
调用(参见@ 987654322@)、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
,那么您可以使用gridComplete
而不是loadComplete
。
【讨论】:
【参考方案2】:查看jqGrid的源码(source)可以看到gridComplete只在grid.base的一行被调用。
1725: if($.isFunction(ts.p.gridComplete)) ts.p.gridComplete.call(ts);
这一行来自函数updatePager
。
您可以在 populate
函数(第 1757 行)中找到 loadComplete
。与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
传递了一个额外的参数。
可能有一些我还没有遇到过的细微差别......并且可能存在一个被调用而另一个没有被调用的情况,但我注意到在排序和分页时,两者都被调用。
【讨论】:
以上是关于loadComplete 和 gridComplete 事件有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章