2014-04-27 121 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