【问题标题】:loadComplete event gets fired on each filter operation in jqGrid?jqGrid中的每个过滤器操作都会触发loadComplete事件?
【发布时间】:2011-06-07 20:31:04
【问题描述】:

根据jqGridwiki页面,“这个事件在每次服务器请求后立即执行。”

在我的网格中,顶部有一个过滤器工具栏。

$(table_data_obj).jqGrid('filterToolbar', {stringResult:true, searchOnEnter:true, autosearch:true, defaultSearch:'cn'}); 

和 loadComplete 函数如:

loadComplete: function(data) {
 data_processing(data);
}

每当我在本地过滤网格数据(没有新的服务器请求)时,都会调用 data_processing(data)。而且我不希望这种行为。如何确保只有新的服务器请求才调用 data_processing(data)。

编辑 我想做一些数据处理,每次从服务器获取新数据。有更好的地方吗?

【问题讨论】:

  • 我被黑的解决方案:检查 data_processing(data) 中的 data.rows[0].cell。单元格对象仅存在于服务器响应数据中。

标签: jqgrid event-handling


【解决方案1】:

您没有发布 jqGrid 定义,也没有描述为什么您有时从服务器获取数据,有时在本地获取数据。如果您需要从服务器重新加载数据,我想您使用loadonce:true 选项并有时将jqGrid 的datatype 参数重置为原始值“json”或“xml”。如果是您的情况,我建议您测试 datatype 参数是否为“本地”。您可以使用 if ($("#list").jqGrid('getGridParam','datatype') !== 'json') {/* local data */} 之类的 if 或仅使用 $("#list")[0].p.datatype 而不是 $("#list").jqGrid('getGridParam','datatype')。如果数据是从服务器加载的,datatype 将是“json”(或“xml”)。 处理loadComplete 事件后,如果您使用loadonce:true 选项,datatype 将更改为“本地”。

【讨论】:

    【解决方案2】:

    使用 firebug 监视对服务器的请求。检查参数,你会知道正在发布哪些值。在事件中使用警报来找出引发服务器请求的特定事件

    【讨论】:

    • 没有新的服务器请求,正如问题中已经提到的。它只是在过滤数据时触发的事件。
    • 你的函数 data_processing() 将最终在每个过滤器上的 loadcomplete() 上调用。 gridcomplete() 可以使用,因为你拥有所有数据。首先你说没有服务器请求,然后你说是服务器请求(检查你的编辑)
    • 我希望在每个新的服务器请求上调用 data_processing(),而不是在过滤数据时调用。并且在过滤中也调用了gridcomplete。
    • 通过 $.ajax 函数接收数据,将该数据以 json 格式保存在某个数组中,并在 loadcomplete() 函数上处理该数据,您的数组将在 loadcomplete 事件中访问。另外,当检索数据时,您可以使用 clientAray。阅读 trirand 如何使用 clientArray。
    猜你喜欢
    • 2011-05-26
    • 1970-01-01
    • 2015-03-16
    • 1970-01-01
    • 1970-01-01
    • 2016-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多