2014-04-27 69 views
0

我试图扩展jqGrid“navgrid”方法为所有我的表格网格添加自定义功能(即添加“navButtonAdd”或“filterToolbar”)。我有大约100页,所有工作良好的jqGrid v4.6.0,都具有相同的结构,并已使用“navGrid”方法,并且不想在每个页面中写入“navButtonAdd”或“filterToolbar”。 左右(根据奥列格在对方的回答例子),我第一次尝试这样的:覆盖扩展jqGrid Navgrid方法

/* 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”我得到这个错误“遗漏的类型错误:未定义是不是一个函数”,指向jQuery的。 jqGrid.src.js:8911

然后我试图覆盖不同的方式,比如

var oldNavGrid = $.fn.jqGrid.navGrid; 

$.fn.jqGrid.navGrid = function() { 
    var ret = oldNavGrid.call(arguments); 
    //... do something else... 
    return ret; 
}; 

总是得到同样的错误。 有人能告诉我一个我想要做的解决方案吗? 谢谢!

回答

2

尝试使用oldNavGrid.apply(this, arguments),而不是oldNavGrid.call(arguments)这不转发this并使用arguments作为第一(也是唯一)的navGrid,而不是正向的所有选项参数。或者,您可以使用oldNavGrid.call(this, ...),但您需要包括的所有参数navGrid明确而不是使用类似数组的对象arguments

+0

谢谢!! oldNavGrid.apply(this,arguments)工作正常! 您是否认为此解决方案是将其他默认功能应用于所有网格的最佳方式? – Aberel

+0

@Aberel:不客气! “所有网格的默认功能”下的含义是什么?如果您的问题现在得到解决,您应该[“接受”](http://meta.stackexchange.com/a/5235)答案。 – Oleg