例如,我在每个页面加载时调用我的默认设置,并将一个函数绑定到loadComplete,为我的网格做一些基本格式化。
在某些页面上,我有其他想要同时执行的逻辑,但是如果我在网格定义中设置了loadComplete,它将覆盖默认设置中的函数。
有没有办法绑定多个处理程序,或者其他一些执行所有必要代码的方法?提前谢谢。
答案 0 :(得分:8)
我想你问一下当前版本的jqGrid中存在的一个重要问题。现在很难在jqGrid中实现更多event handler。对于使用jqGrid的小项目,这个问题并不重要,但是如果你想构造一些解释jqGrid的类,这个问题很重要。您当前的解决方法是可以的,但有您自己理解的限制。您可以实施仅一个更多额外loadCompleteEx
处理程序的主要问题。
我建议您使用jQuery.trigger或更好jQuery.triggerHandler。您可以将其与jQuery.bind和jQuery.unbind一起使用。在这种方式中,您可以定义任意数量的事件处理程序,其工作方式与标准jQuery事件类似。
例如,
var grid = $("#list");
grid.bind('jqGridLoadComplete',function(e,data) {
alert ("in first jqGridLoadComplete event handler. Called for the page " +
data.page);
});
grid.jqGrid({
// jqGrid parameters
// ...
loadComplete: function(data) {
alert("main load complete");
$(this).triggerHandler("jqGridLoadComplete", data);
}
});
grid.bind('jqGridLoadComplete.jqGrid',function(e,data) {
alert ("in second jqGridLoadComplete event handler. Called for the page " +
data.page);
});
在第二个jQuery.bind
中,我使用命名空间'jqGrid'中的命名空间事件'jqGridLoadComplete.jqGrid'。因此,您可以使用您知道的(以及您需要的)关于jQuery中标准事件的所有内容。
查看相应的演示here。尝试切换网格中的页面或更改排序以调用loadComplete
。
我在 jqGrid定义之后绑定了第二个jqGridLoadComplete
。由于我的演示使用datatype:'local'
,因此{/ 1}}的第一次调用将在执行绑定之前 。因此,在第一个loadComplete
执行时,将会调用第二个loadComplete
事件处理程序。因此,您最好在jqGrid定义之前绑定事件处理程序。如果您确定将始终调用该事件。
更新: 重要!!! 。如果您使用当前版本的jqGrid,则一个不需要在jqGridLoadComplete
内明确触发jqGridLoadComplete
事件。 jqGrid 已为您执行此操作。上面的代码是之前编写的相应的功能包含在jqGrid的主代码中。答案刚刚描述了主要的想法如何多个事件处理程序可以在jqGrid中实现。在写完答案之后,我发布了一些拉取请求到trirand,我建议在jqGrid中实现jQuery事件。从版本4.3.2开始(参见here)jqGrid支持事件。
答案 1 :(得分:0)
如果你想在请求之前使用beforeRequest函数做某事。
您还可以将函数绑定到gridComplete选项。你能给出一个代码示例来展示你想要做什么吗?
答案 2 :(得分:0)
我的解决方案:
// Global Variable in my common.js
var loadCompleteEx;
// set defaults
$.extend($.jgrid.defaults, {
datatype: 'json',
height: "100%",
...
loadComplete: function () {
if ($("#grid").getGridParam("reccount") === 0)
$("#empty-grid-message").show();
else
$("#empty-grid-message").hide();
// if loadCompleteEx is defined, call it at the end of loadComplete
if (loadCompleteEx)
loadCompleteEx();
}
}
// In my specific page js
loadCompleteEx = function () {
// Do more stuff after load completes
};
像魅力一样......这里有什么不好的做法吗?
答案 3 :(得分:0)
有一个比我在其他地方推荐的更容易解决方案:
// Set defaults
jQuery.extend(jQuery.jgrid.defaults, {
loadComplete: function () {
myCustomFunction();
}
});
loadComplete: function() {
// someOtherFunction();
$.jgrid.defaults.loadComplete(); // Runs myCustomFunction()
},