Если я хочу настроить часть возможности объекта пользовательского интерфейса jQuery путем замены одной из функций, как я пошел бы о выполнении этого?
Пример: предположите, что я хотел изменить способ, которым виджет автоматического заполнения jQuery представил предложения. Существует метод на объекте автоматического заполнения, который похож на это:
_renderItem: function( ul, item) {
return $( "<li></li>" )
.data( "item.autocomplete", item )
.append( "<a>" + item.label + "</a>" )
.appendTo( ul );
},
Я мог заменить это?
Я думаю, что это можно было бы назвать Исправлением Обезьяны.
Как? Какой синтаксис я использовал бы?
Я не знаю о пользовательском интерфейсе jQuery, но в целом, это то, как вы переопределяете функцию:
(function() {
var _oldFunc = _renderItem;
_renderItem = function(ul,item) {
// do your thing
// and optionally call the original function:
return _oldFunc(ul,item);
}
})();
Причина, по которой это заключено в анонимный функция заключается в создании закрытия для сохранения исходной функции. Таким образом, он никогда не может вмешиваться в глобальные переменные.
РЕДАКТИРОВАТЬ
Чтобы сделать это с fn в виджете jQuery UI, используйте следующий синтаксис:
FYI: способ получить функцию выглядит следующим образом:
function monkeyPatchAutocomplete() {
// don't really need this, but in case I did, I could store it and chain
var oldFn = $.ui.autocomplete.prototype._renderItem;
$.ui.autocomplete.prototype._renderItem = function( ul, item) {
// whatever
};
}