Javascript 了解YUI模块的加载和连接

Javascript 了解YUI模块的加载和连接,javascript,yui,yahoo,yahoo-api,Javascript,Yui,Yahoo,Yahoo Api,我正在使用最新版本的雅虎用户界面 我正在查看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 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传递给这两个实例?

首先回答第二个问题:

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);
在每个
use
功能中,全局
Y1
变为本地
Y
。这也说明了你第一个问题的答案。本例中使用了
setTimeout
,因为每个
use
函数都会附加模块并异步运行其函数。如果没有
setTimeout
,您很可能会从第二个
use
中得到错误,因为它将在第一个
use
定义
myCalendar
之前运行

每个
use
都将执行自己的模块延迟加载。如果模块已经加载,则只需将其附加到YUI实例。实际上,大多数应用程序只在每个沙箱中使用一个
use

当然,还有很多更多的信息和细节在报告中