loadComplete和gridComplete事件有何区别?

17
这个问题源于我看了Olegthis答案和其中的演示网格。 gridComplete
这个事件在所有数据加载到网格中并且所有其他进程完成后触发。此外,该事件与datatype参数无关,以及在排序、分页等之后触发。 loadComplete
每次服务器请求后立即执行此事件。响应数据取决于datatype网格参数。
从文档中我理解到,gridComplete在绘制网格结束时触发,而loadComplete在jqGrid完成与后端通信后触发。
因此,我想知道为什么在演示中,loadComplete用于更改单元格的颜色,而不是gridComplete

如果对loadComplete和gridComplete属性之间的差异不太熟悉,我会认为loadComplete加载所有数据、样式、布局和间距,而gridComplete只是从loadComplete方法中获取数据并在视图中呈现网格。 - iAmClownShoe
2个回答

28

我认为许多jqGrid用户都会问这个问题。所以了解答案是很有趣的。

我个人更喜欢使用loadComplete。如果您查看我发布的所有示例代码,您会发现只有当原帖发布它并且我稍微修改了一点代码时才会使用gridComplete。我更喜欢使用loadComplete,因为它具有一些优势,而gridComplete则存在一些缺点。

下面是loadComplete的优势:

  • 如果整个网格主体重新加载,则它是将被调用的最后一个回调。例如,在从服务器加载网格页面之后。重要的是要理解,如果用户更改某个列的排序或设置过滤器或选择另一页,则将重新加载网格主体。
  • loadComplete具有代表本地数据的完整页面或从服务器加载的完整数据的data参数。
在另一方面,gridComplete将会被调用(在当前版本的jqGrid 4.4.4中)从内部的updatepager(参见这里),它将会从delRowData(参见这里),addRowData(参见这里)和clearGridData(参见这里)方法中被调用;此外,还有addXmlData(参见这里)和addJSONData(参见这里)。 这并不是大多数人想要的。另一个缺点是,如果查看addXmlData(请参见此处)和 addJSONData(请参见此处),可以看到从这里调用了updatepager和因此会调用gridCompleteloadonce: true内部参数 data_index 将填充从服务器返回的完整数据。当使用loadonce: true时,回调gridComplete将在从服务器加载第一页数据后被调用。此时,data_index仅包含该页面的数据。另一方面,所有从服务器返回并在本地保存在data_index中处理的数据都会在稍后调用loadComplete

如果从服务器加载数据并且不使用loadonce: true选项,则可以使用gridComplete而不是loadComplete来代替clearGridDataaddRowDatadelRowData


3
看jqGrid源代码(源代码),你会发现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); }

事实上,函数 populateupdatePager 经常一起使用,所以当进行排序和分页时,会调用两个回调函数。不同之处在于,loadComplete 会传递一个额外的参数。
可能还有我没有遇到的细微差别......也许有时候只调用其中一个,不调用另一个,但是我注意到在排序和分页时,两个函数都会被调用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接