jqGrid中的gridComplete问题

Issue with gridComplete in jqGrid

本文关键字:问题 gridComplete 中的 jqGrid      更新时间:2023-09-26

我有一个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事件和回调。当时我花了很多时间来创建相应的pull请求,该请求被合并到jqGrid的主代码中。稍后在免费的jqGrid中,我更改了jqGrid的内部代码,以便实际上每个回调都有相应的jQuery事件。如果您需要编写公共操作(公共回调),这些事件非常重要,这些操作需要在项目的每个网格上完成。只有使用事件,才能编写不保留任何回调的jqGrid插件

事件的使用非常简单。重要的是要理解,您可以在创建jqGrid之前绑定事件。处理事件jqGridBeforeInitGrid(仅存在于自由jqGrid中)、jqGridInitGridjqGridGridCompletejqGridAfterGridCompletejqGridLoadCompletejqGridAfterLoadComplete尤为重要。

我建议您阅读描述gridCompleteloadComplete之间差异的答案。我个人几乎只使用loadComplete,但回调的选择取决于您的确切要求。

让我们知道您确实需要使用commongridComplete。然后,您可以选择在网格中使用的gridComplete之后定义一些操作,或在其之前定义一些操作。根据您应该使用jqGridGridCompletejqGridAfterGridComplete事件的选择。让我们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,则应添加第一个附加事件参数,并使用以第二个参数开头的典型参数:

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

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