Понимание загрузки и подключения модуля YUI - PullRequest
1 голос
/ 05 марта 2012

Я использую последнюю версию 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 в оба случая?

1 Ответ

0 голосов
/ 06 марта 2012

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

Функция 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 гораздо больше информации и подробностей.

...