我有一个 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();
}
});
答案 0 :(得分:2)
从版本4.3.2开始,jqGrid支持jQuery Events和回调。当时我花了很多时间来创建相应的pull请求,该请求被合并到jqGrid的主代码中。后来在免费的jqGrid中,我更改了jqGrid的内部代码,以便实际上每个回调都有相应的jQuery事件。如果您需要编写需要在项目的每个网格上执行的常见操作(常见回调),这些事件非常重要。只使用事件,可以编写jqGrid 插件,但不保留任何回调。
事件的使用非常简单。重要的是要了解您可以在创建jqGrid之前绑定事件。对于事件jqGridBeforeInitGrid
(仅存在于免费的jqGrid中),jqGridInitGrid
,jqGridGridComplete
,jqGridAfterGridComplete
,jqGridLoadComplete
,jqGridAfterLoadComplete
,这一点尤其重要。
我建议您阅读the answer,其中介绍gridComplete
和loadComplete
之间的差异。我个人几乎只使用loadComplete
,但回调的选择取决于您的确切要求。
让我们真的需要使用 common gridComplete
。然后,您可以选择在网格中使用 gridComplete
之后定义一些操作或之前。根据您的选择,您应该使用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 其他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。