了解YUI模块加载和附加

时间:2012-03-05 07:43:02

标签: javascript yui yahoo yahoo-api

我使用的是最新版本的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 :(得分:0)

首先回答第二个问题:

YUI()函数创建沙箱。所以

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

将是两个单独的沙箱,Y1Y2对彼此一无所知。 但是你可以这样做。

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 docs中有更多信息和详细信息。