JQGrid:loadComplete NOT数据类型:function时触发

时间:2011-09-16 23:02:09

标签: jqgrid

如果我调用函数来加载我的网格数据,则不会触发loadComplete。我需要处理此事件,以便我可以正确地手动更新多选复选框。如果我在gridComplete中更新,我必须单击两次复选框以取消选中它。

1 个答案:

答案 0 :(得分:5)

在上一个问题中,您写道您在服务器端使用WCF。在的情况下,您不需要使用datatype作为功能。而不是你可以使用以下参数:

datatype: "json",
ajaxGridOptions: { contentType: "application/json" },
serializeGridData: function (data) {
    return JSON.stringify(data);
}

为确保旧版网络浏览器支持JSON.stringify,您应该添加json2.jsloadComplete可以从here加载。

the old answer中,您可以找到更多代码示例(并下载演示),其中显示了如何将WCF与jqGrid一起使用。

现在我将回答您原来的问题:"为什么datatype不会触发"如果您使用datatype作为函数。简短的回答是:如果您使用loadComplete作为功能,则您的代码负责调用datatype

如果您使用datatype作为函数,则代码对jqGrid通常执行的操作负责。首先,你必须了解datatype函数应该做什么。文档中的一个示例(参见here)显示了$("#list").jqGrid({ url: "example.php", mtype: "GET", datatype: function (postdata, loadDivSelector) { var ts = this, // cache 'this' to use later in the complete callback p = this.p; // cache the grid parameters $.ajax({ url: p.url, type: p.mtype, dataType: "json", contentType: "application/json", data: JSON.stringify(postdata), cache: p.mtype.toUpperCase() !== "GET", beforeSend: function (jqXHR) { // show the loading div $($.jgrid.jqID(loadDivSelector)).show(); // if loadBeforeSend defined in the jqGrid call it if ($.isFunction(p.loadBeforeSend)) { p.loadBeforeSend.call(ts, jqXHR); } }, complete: function () { // hide the loading div $($.jgrid.jqID(loadDivSelector)).hide(); }, success: function (data, textStatus, jqXHR) { ts.addJSONData(data); // call loadComplete if ($.isFunction(p.loadComplete)) { p.loadComplete.call(ts, data); } // change datatype to "local" to support // "loadonce: true" or "treeGrid: true" parameters if (p.loadonce || p.treeGrid) { p.datatype = "local"; } }, error: function (jqXHR, textStatus, errorThrown) { if ($.isFunction(p.loadError)) { p.loadError.call(ts, jqXHR, textStatus, errorThrown); } }); }, ... // other parameters }); 作为函数的最简单但不完整的实现。更完整的代码示例如下所示:

scroll: 1

你可以看到代码不是那么短。在上面的示例中,我们仍然不支持某些jqGrid选项,例如虚拟滚动(scroll: truedatatype)。

尽管如此,我希望我现在清除为什么我不建议使用ajaxGridOptions作为功能。如果您使用它,您必须了解很多事情 jqGrid如何在内部工作。您应该检查它的源代码,以确保您正确地执行所有操作。如果您跳过某些事情,那么在某些情况下或在某些jqGrid参数组合中,您的代码将无效。

如果您查看我在答案开头(serializeGridDataloadonce: true的用法)中包含的代码,您会发现代码非常简单。此外它适用于jqGrid参数的所有其他合法组合。例如,您可以使用loadCompleteloadErrorscroll: 1甚至虚拟滚动(scroll: true或{{1}})。所需的一切都取决于参数为你做jqGrid