我试图扩展jqGrid" navgrid"为我的所有表格网格添加自定义功能(即添加" navButtonAdd"或" filterToolbar")的方法。我有大约100页,都与jqGrid v4.6.0一起工作,都具有相同的结构并且已经使用" navGrid"方法,并且不想写" navButtonAdd"或" filterToolbar"在每个页面中。 所以(根据奥列格在其他答案中的例子),我首先尝试了这个:
/* this is my global.js file, which is included for every page, of course AFTER jquery.jqGrid.src.js */
var oldNavGrid = $.fn.jqGrid.navGrid;
$.jgrid.extend({
navGrid: function() {
var ret = oldNavGrid.call(arguments);
//... do something else, such navButtonAdd or filterToolbar...
return ret;
}
});
//...
/* this is the structure of every page */
var $myGrid = $("#$myGrid");
$myGrid.jqGrid({
//grid options...
})
$myGrid.jqGrid('navGrid', "#myPager",
{edit:false, add:true, del:true, search:true, refresh:true}, {}, {}, {}, {})
但是当我打电话给" navGrid"我收到此错误" Uncaught TypeError:undefined不是函数",指向jquery.jqGrid.src.js:8911
然后我尝试了不同的覆盖方式,例如
var oldNavGrid = $.fn.jqGrid.navGrid;
$.fn.jqGrid.navGrid = function() {
var ret = oldNavGrid.call(arguments);
//... do something else...
return ret;
};
总是得到类似的错误。 有人可以告诉我一个我想做的解决方案吗? 谢谢!
答案 0 :(得分:2)
尝试使用oldNavGrid.apply(this, arguments)
代替oldNavGrid.call(arguments)
而不是this
并使用arguments
作为第一个(以及only)参数navGrid
而不是转发所有选项。或者,您可以使用oldNavGrid.call(this, ...)
,但您需要明确包含navGrid的所有参数,而不是使用类似数组的对象arguments
。