【问题标题】:What the difference between loadComplete and gridComplete events?loadComplete 和 gridComplete 事件有什么区别?
【发布时间】:2013-03-04 10:50:20
【问题描述】:

这个问题是在我查看了Olegthis 答案和其中的demo-grids 之后产生的。

gridComplete:

这会在所有数据加载到网格和所有其他数据后触发 流程完成。该事件也独立于 数据类型参数和排序后分页等。

loadComplete:

此事件在每次服务器请求后立即执行。数据 来自响应的数据取决于数据类型网格参数

从该文档中,我了解到gridComplete 在绘制网格结束时触发,loadComplete 在 jqGrid 完成与后端的通信后触发。

所以我想知道 - 为什么在演示中,loadComplete 用于更改单元格的颜色而不是 gridComplete

【问题讨论】:

  • 如果不熟悉 loadComplete 和 gridComplete 属性之间的区别,我会假设 loadComplete 会加载所有数据、样式、布局和间距,而 gridComplete 只是从 loadComplete 方法中获取数据和渲染视图中的网格。

标签: javascript datagrid jqgrid


【解决方案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 选项、clearGridDataaddRowDatadelRowData,那么您可以使用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); }
    

    问题是,函数populateupdatePager 经常串联发生,所以你看到在排序和分页时,两个回调都被调用了。不同之处再次在于 loadComplete 传递了一个额外的参数。

    可能有一些我还没有遇到过的细微差别......并且可能存在一个被调用而另一个没有被调用的情况,但我注意到在排序和分页时,两者都被调用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-12
      • 2011-02-11
      • 2010-11-09
      • 2013-08-29
      • 1970-01-01
      • 2022-07-28
      相关资源
      最近更新 更多