覆盖扩展jqGrid Navgrid方法

时间:2014-04-27 14:27:34

标签: jquery jqgrid

我试图扩展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;
};

总是得到类似的错误。 有人可以告诉我一个我想做的解决方案吗? 谢谢!

1 个答案:

答案 0 :(得分:2)

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