Понимание загрузки и подключения модуля YUI

Я использую последнюю версию Yahoo User Interface.

Я просматриваю документы объекта YUI global и у меня есть несколько вопросов.

Я хотел бы знать, когда загружается модуль и когда он привязан к конкретному экземпляру?

YUI().use('calendar', function (Y) {

     // I assume that when we are here that the calendar module has been loaded?

     // But when is it attached to this instance of YUI?

});

Как создать несколько песочниц YUI, если первый экземпляр объявлен следующим образом:

var Y = YUI();

Y.use('node', 'event', function (Y) {
});

Вы бы по-прежнему передавали Y в оба экземпляра?


person Brendan Vogt    schedule 05.03.2012    source источник


Ответы (1)


Сначала ответьте на второй вопрос:

Функция YUI() создает песочницу. Так

var Y1 = YUI();
var Y2 = YUI();

будут две отдельные песочницы, и Y1 и Y2 ничего не будут знать друг о друге. Однако вы можете сделать что-то вроде этого.

Y1 = YUI();

Y1.use('calendar', function (Y) {
    Y.myCalendar = new Y.Calendar().render(Y.one('body'));
});

setTimeout( function () {

    Y1.use(function (Y) {
        Y.myCalendar.on('dateClick', function (e) {
            alert('date clicked');
        });
    });

}, 100);

Глобальный Y1 становится локальным Y в каждой из use функций. Это также иллюстрирует ответ на ваш первый вопрос. В этом примере используется setTimeout, потому что каждая функция use прикрепляет модули и запускает свои функции асинхронно друг с другом. Без setTimeout вы, скорее всего, получите ошибку от второго use, потому что он будет запущен до того, как myCalendar будет определен первым use.

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

Конечно, гораздо больше информации и деталей можно найти в документах YUI.

person mjhm    schedule 06.03.2012