Я пытаюсь расширить метод 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;
};
всегда получая подобные ошибки. Может ли кто-нибудь сказать мне решение, что я хочу сделать? Благодарю!!
Попробуйте использовать oldNavGrid.apply(this, arguments)
вместо oldNavGrid.call(arguments)
которые не переадресуют this
и используют arguments
в качестве первого (и единственного) параметра navGrid
вместо пересылки всех параметров. В качестве альтернативы вы можете использовать oldNavGrid.call(this,...)
, но вам нужно явно указать все параметры navGrid, а не использовать arguments
объектов массива.