2012-03-05 39 views
1

我正在使用最新版本的Yahoo User Interface瞭解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考慮兩個實例?

回答

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成爲每個use函數的局部Y。這也說明了你的第一個問題的答案。在這個例子中使用了setTimeout,因爲每個use函數都附加模塊並相互異步運行其功能。如果沒有setTimeout,您很可能會從第二個use中得到一個錯誤,因爲它會在第一個use定義myCalendar之前運行。

每個use都會執行它自己的延遲加載模塊。如果這些模塊已經加載,只需要將它們附加到YUI實例。實際上,大多數應用程序每個沙箱只使用一個use

當然,還有很多更多的信息和細節YUI docs