перезаписать расширение jqGrid метод Navgrid

0

Я пытаюсь расширить метод 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;
};

всегда получая подобные ошибки. Может ли кто-нибудь сказать мне решение, что я хочу сделать? Благодарю!!

Теги:
jqgrid

1 ответ

2
Лучший ответ

Попробуйте использовать oldNavGrid.apply(this, arguments) вместо oldNavGrid.call(arguments) которые не переадресуют this и используют arguments в качестве первого (и единственного) параметра navGrid вместо пересылки всех параметров. В качестве альтернативы вы можете использовать oldNavGrid.call(this,...), но вам нужно явно указать все параметры navGrid, а не использовать arguments объектов массива.

  • 0
    Спасибо!! oldNavGrid.apply (это, аргументы) работает отлично! Считаете ли вы это решение лучшим способом применить дополнительную функциональность по умолчанию ко всем сеткам?
  • 0
    @Aberel: Добро пожаловать! Что вы имеете в виду под "функциональностью по умолчанию для всех сеток"? Если ваша проблема решена сейчас, вы должны «принять» ответ.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню