jqGrid 中的 gridComplete 问题

Issue with gridComplete in jqGrid

我有一个 jQGrid,它有 loadComplete 和 gridComplete 参数。网格目前运行良好。

现在我必须做一个通用的更改,我需要添加一个对寻呼机事件有效的事件。

我添加了以下代码以将另一个事件与 gridComplete 绑定。

jQuery('#grid0').jqGrid('setGridParam', { gridComplete: function()
            { 
                           myGenericMethod();

            }});

此代码的问题是:调用了 myGenericMethod() 但未执行原始 gridComplete 块。

我相信@Oleg 会给出答案。

我的网格声明如下:

$("#grid0").jqGrid({
         datatype: "jsonstring",


    datastr:GetJSON1(),

    colNames:[strFieldNames[0], strFieldNames[1], strFieldNames[2], strFieldNames[3]],

    colModel:[ 
        {name:'newdynaid', index:'newdynaid', width: 50, editable:true, editoptions:{readonly:false, size:5}, hidden:true,sortable:false},

        {name:strFieldValues[1], index:strFieldValues[1], editable:false, readonly:true, width:80}, 

        {name:strFieldValues[2], index:strFieldValues[2], editable:false, readonly:true, width:80,
                hidden:false,sortable:true}, 

        {name:strFieldValues[3], index:strFieldValues[3], editable:false, readonly:true, width:80}

        ],


        postData: {},
        rowNum: 10,
        height: "100%",
        shrinkToFit: true,
        autowidth: true,
        rownumbers: false,
        pager: '#pager0',
        sortname: 'id',

        viewrecords: true,
        sortorder: "asc",
        emptyrecords: "Empty records",
        loadonce: true,
        sortable: true,

        rowList: [6,10,20,40,60,80,100],

        loadComplete: function() {
             var grid0 = jQuery("#grid0");
             var allDropDownElements = getAllDropDownElements0(); 
            var allDropDownElementRefTables = getAllDropDownElementRefTables0();
             processLoadComplete(grid0, allDropDownElements, allDropDownElementRefTables, 0);
             },
        gridComplete:function() {
             var grid0 = $("#grid0");
             var pager0Center = $("#pager0_center");
             processGridComplete(grid0, pager0Center, 0);
             onLoadpopulateName();
             }
        });

从 4.3.2 版开始,jqGrid 支持 jQuery Events 和回调。当时我花了很多时间来创建相应的合并到 jqGrid 主代码的拉取请求。后来在免费的 jqGrid 中,我更改了 jqGrid 的内部代码,这样实际上 每个 回调都有相应的 jQuery 事件。如果您需要编写需要在项目的每个网格上完成的 common 操作(公共回调),那么这些事件非常重要。仅使用事件可以编写不保留任何回调的 jqGrid plugin

事件的使用非常简单。了解您可以在 before 创建 jqGrid 之前绑定事件很重要。处理事件 jqGridBeforeInitGrid(仅存在于免费的 jqGrid 中)、jqGridInitGridjqGridGridCompletejqGridAfterGridCompletejqGridLoadCompletejqGridAfterLoadComplete 尤其重要。

我建议您阅读 the answer,其中描述了 gridCompleteloadComplete 之间的区别。我个人几乎只使用loadComplete,但回调的选择取决于您的具体要求。

告诉我们您确实需要使用 common gridComplete。然后你可以选择在网格中使用 after gridCompletebefore 定义一些动作。取决于您应该使用 jqGridGridComplete 还是 jqGridAfterGridComplete 事件的选择。让我们 jqGridAfterGridComplete 就是您所需要的。然后代码可以如下所示

$("#grid0").bind("jqGridAfterGridComplete", function () {
    // the event handler will be executed AFTER gridComplete
    ...
});
$("#grid0").jqGrid({
    // common options which you need
    pager: "#pager0",
    gridComplete:function() {
        var $self = $(this), p = $self.jqGrid("getGridParam"),
            pager0Center = $(p.pager + "_center"); //$("#pager0_center");
        ...
    }
});

以上代码适用于 jqGrid(从 4.3.2 版开始)和免费的 jqGrid。如果您需要使用具有选项的事件,例如 jqGridAfterLoadComplete 那么您应该添加 first 附加事件参数并使用以第二个参数开头的典型参数:

$("#grid0").bind("jqGridAfterLoadComplete", function (e, data) {
    // the event handler will be executed AFTER loadComplete
    ...
});

顺便说一句,免费的 jqGrid 允许您使用 pager: true 而不要定义空的 <div id="pager0"></div>。在免费 jqGrid 的情况下 自动生成具有唯一 ID 的 div 并将 jqGrid 的 pager 选项修改为 id selecror。所以你可以像上面的例子一样使用 gridComplete 回调。有关详细信息,请参阅 the wiki article