jqGrid中的gridComplete问题

时间:2015-03-31 11:10:25

标签: javascript jquery 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();
             }
        });

1 个答案:

答案 0 :(得分:2)

从版本4.3.2开始,jqGrid支持jQuery Events和回调。当时我花了很多时间来创建相应的pull请求,该请求被合并到jqGrid的主代码中。后来在免费的jqGrid中,我更改了jqGrid的内部代码,以便实际上每个回调都有相应的jQuery事件。如果您需要编写需要在项目的每个网格上执行的常见操作(常见回调),这些事件非常重要。只使用事件,可以编写jqGrid 插件,但不保留任何回调。

事件的使用非常简单。重要的是要了解您可以在创建jqGrid之前绑定事件。对于事件jqGridBeforeInitGrid(仅存在于免费的jqGrid中),jqGridInitGridjqGridGridCompletejqGridAfterGridCompletejqGridLoadCompletejqGridAfterLoadComplete,这一点尤其重要。

我建议您阅读the answer,其中介绍gridCompleteloadComplete之间的差异。我个人几乎只使用loadComplete,但回调的选择取决于您的确切要求。

让我们真的需要使用 common gridComplete。然后,您可以选择在网格中使用 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,那么您应该添加 first 其他Event参数,并使用从第二个参数开始的典型参数:

$("#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