Расширение плагинов и классов YUI3 - PullRequest
3 голосов
/ 30 марта 2012

Я использую плагин автозаполнения YUI3.Y.Plugin.Autocomplete.

Теперь я хочу расширить этот плагин и создать несколько очень специфических плагинов.Например, Y.MyModule.TagAutocomplete, Y.MyModule.EmailAutocomplete и т. Д.

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

1 Ответ

1 голос
/ 03 апреля 2012

Я никогда не пытался расширить плагины, но я расширял с Y.Base, и это работает, как описано здесь: http://yuilibrary.com/yui/docs/base/

В деталях:

  1. Вы создаете "функцию конструктора". Здесь вы должны вызвать конструктор суперкласса:

    function MyClass(config) {
        // Invoke Base constructor, passing through arguments
        MyClass.superclass.constructor.apply(this, arguments);
    }
    
  2. Далее, используйте метод Y.extend, чтобы сделать свой собственный класс расширенным от Y.Base (или Y.Plugin.Autocomplete в вашем случае)

    Y.extend(MyClass, Y.Base, {
        // Prototype methods for your new class
    });
    
  3. Y.Base имеет специальный метод, называемый «инициализатор» - этот метод выполняется для каждого класса в иерархии при создании нового объекта, и вам не нужно вызывать родительский инициализатор вручную. Я думаю, у Y.Plugin.Autocomplete есть свой «инициализатор». Так что сделайте следующее:

    Y.extend(MyClass, Y.Plugin.Autocomplete, {
        initializer: function(config) {
            alert("This initializer called after Y.Plugin.Autocomplete's initializer");
        }
    });
    

Последний комментарий с моей стороны: я никогда не пытался расширить Y.Plugin.Autocomplete, я могу сказать, что в реализации Autocomplete есть что-то под капотом. Попробуй!

...