Я могу заменить или изменить функцию на виджете UI jQuery? Как? (Исправление обезьяны)

Если я хочу настроить часть возможности объекта пользовательского интерфейса jQuery путем замены одной из функций, как я пошел бы о выполнении этого?

Пример: предположите, что я хотел изменить способ, которым виджет автоматического заполнения jQuery представил предложения. Существует метод на объекте автоматического заполнения, который похож на это:

_renderItem: function( ul, item) {
    return $( "<li></li>" )
        .data( "item.autocomplete", item )
        .append( "<a>" + item.label + "</a>" )
        .appendTo( ul );
},

Я мог заменить это?

Я думаю, что это можно было бы назвать Исправлением Обезьяны.

Как? Какой синтаксис я использовал бы?

10
задан Cheeso 12 March 2010 в 22:37
поделиться

1 ответ

Я не знаю о пользовательском интерфейсе 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
  }; 
} 
18
ответ дан 3 December 2019 в 20:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: