Использование initialize () и setup () в Mootools - PullRequest
0 голосов
/ 07 июня 2010

В классах Mootools есть метод initialize(), который вызывается при создании нового объекта.

Кажется, что setup() также является широко используемым методом.

Большинство классов, которые я наблюдал, звонят this.setup() из initialize() и больше нигде, что заставляет меня задуматься:

Какова цель setup()? Почему бы просто не ввести код setup() в initialize()? Когда имеет смысл использовать метод setup()?

Ответы [ 4 ]

2 голосов
/ 09 июня 2010

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

Я склонен использовать такие методы, какthis.setupScene() и this.attachEvents() для абстрагирования различных действий.в этих методах я склонен перебирать элементы и вызывать меньшие псевдоприватные методы, которые выполняют требуемые манипуляции с dom или element.addEvent, иначе, this.elements.each(function(el) { this._attachEvent(el, "something"); }, this);

Если вы делитесь кодом с другими пользователями,Это определенные соглашения, которых большинство авторов mootools стараются придерживаться при выпуске плагинов или добавлении в ядро ​​и другие форки.

например, если класс относится к элементу или массиву элементов, всегда устанавливайте this.element = document.id(el); и т. Д.

для ссылки на лучшие практики: http://ryanflorence.com/11-tips-for-creating-great-mootools-plugins/ или даже http://davidwalsh.name/mootools-class-tips

через некоторое время они начинают обретать совершенный смысл и невероятно помогут вам в вашей работе.

1 голос
/ 09 июня 2010

Нет никакой пользы от использования функции setup / build / what, которая вызывается только из функции инициализации класса mootools.

Полагаю, это различие происходит от языков, в которых у вас нет аргументов переменных функций, а скорее перегружены имена функций различными наборами аргументов. Как Java.

В Java это имеет смысл. Когда у вас есть несколько конструкторов, которые отличаются по аргументам, которые они принимают, то вы обрабатываете специфические для аргументов операции в вашем конструкторе и общие вещи, которые каждый конструктор должен вызывать в методе, который вызывается всеми конструкторами.

Лично я не делаю это различие в моих классах mootools, а скорее лишь использую функции в своей собственной функции, если необходимо повторно использовать код из другой функции.

Не запутайтесь в функциях настройки, в них нет скрытой силы.

1 голос
/ 07 июня 2010

setup не является частным методом MooTools.Он не будет ничего делать, пока вы не создадите реальный метод, названный таким образом.

В MooTools-more есть один экземпляр этого метода, и это не что иное, как простое ключевое слово, как createDefaults() или setInitialStuff().

0 голосов
/ 22 июня 2010

Имейте в виду, что классы MooTools предназначены для расширения и повторного использования существующего кода. Когда вы расширяете класс, вы можете изменить инициализацию, но не код установки. Конечно, вы можете запустить родительский инициализатор, используя this.parent(), но это может привести к нежелательным побочным эффектам.

Возьмите этот (очень простой) пример ( view live ):

var Counter = new Class({
    initialize: function(i){
        this.i = i;
        this.setup();
    },

    setup: function(){
        new Element('p', {
            'text': this.i
        }).inject(document.body);
    }
});

var MultiplyCounter = new Class({
    Extends: Counter,

    initialize: function(i){
        this.i = i * 2;
        this.setup();
    }
});

new Counter(5);
new MultiplyCounter(5);

Расширенный класс изменяет только инициализацию i, а не всю реализацию класса. Для более сложных классов это создает более быстрый (инициализация выполняется только один раз) и более чистый ( разделяй и властвуй ) код.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...