JQuery расширение классов и функций выпускают - PullRequest
2 голосов
/ 21 января 2012

Я смотрю вокруг и не могу найти четкого ответа на мою ситуацию.Поэтому я делаю итерацию для существующего плагина jQuery jquery.autocomplete

Итак, у меня есть плагин автозаполнения jquery с несколькими вещами, которые мне нужно изменить.Шаг 1: Нужно расширить значения по умолчанию (это работает)

$.extend($.Autocompleter.defaults, customeDefaults);

Это работает, теперь я хочу расширить функции, в которые будут помещены эти значения по умолчанию.Мое зависание включает в себя следующее:

в автозаполнении У меня есть такая установка

$.Autocompleter.Select = function() {
    //a bunch of stuff in this class including:
    function init() {
      //this is the function that I need to extend.
    }
}

Я пытался это

$.extend($.Autocompleter.Select.init, myChanges);

это не сработало Тогда я сделал

console.log($.Autocompleter.Select.init());

, и он выдал ошибку типа, говорящую, что у Select не было метода init ..., который он делает.Есть идеи?

1 Ответ

2 голосов
/ 21 января 2012

Способ, который в настоящее время настроен, вы не можете расширить функцию init, потому что он не привязан к объекту $ .Autocompleter.Select - он просто объявлен как функция внутри него.

Вместо этого, если функция была определена так, вы можете расширить ее:

$.Autocompleter.Select = function() {
    return {
      this.init() {
        //implementation
      }
    }
}

edit: Хорошо, после просмотра исходного кода, действительно нет возможности расширить функцию init. Вы могли бы, вероятно, расширить метод отображения, который вызывает init (), и сначала сделать так, как вы хотите, а затем вызвать исходную версию. Метод очень похож на ответ на этот другой вопрос

var old_display = $.Autocompleter.Select.display;
$.Autocompleter.Select.display = function(args) { 
  //whatever you need to do first
  old_display.apply(this, args);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...