【问题标题】:overwrite extend jqGrid Navgrid method覆盖扩展 jqGrid Navgrid 方法
【发布时间】:2014-04-27 14:27:34
【问题描述】:

我正在尝试扩展 jqGrid“navgrid”方法,为我的所有表格网格添加自定义功能(即添加“navButtonAdd”或“filterToolbar”)。我有大约 100 个页面,所有页面都与 jqGrid v4.6.0 一起工作,都具有相同的结构并且已经使用“navGrid”方法,并且不想在每个页面中编写“navButtonAdd”或“filterToolbar”。 所以(根据 Oleg 在其他答案中的示例),我首先尝试了这个:

/* 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 is not a function”,指向 jquery.jqGrid.src.js:8911

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

var oldNavGrid = $.fn.jqGrid.navGrid;

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

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

【问题讨论】:

    标签: jquery jqgrid


    【解决方案1】:

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

    【讨论】:

    • 谢谢!! oldNavGrid.apply(this, arguments) 工作正常!您是否认为此解决方案是将附加默认功能应用于所有网格的最佳方式?
    • @Aberel:不客气!您在“所有网格的默认功能”下是什么意思?如果您的问题现在解决了,您应该"accept" 回答。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-07
    • 1970-01-01
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多