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
选项, clearGridData
, addRowData
和delRowData
那么你可以使用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); }
事情是,functionpopulate
和updatePager
经常发生在一起,所以你看到,当sorting和分页,这两个callback被称为。 不同之处在于, loadComplete
传递了一个额外的参数。
有可能是细微的差异,我还没有遇到过…有可能是一个被调用,另一个不是,但我已经注意到,在sorting和分页,都被称为。