我正在編寫一個框架,允許您的模塊在提供之前定義將哪些JS文件添加到頁面中。這個想法是,一個模塊可能會增加這樣的:頁面中有多個js文件,每個文件都以require()開頭:錯誤的練習還是OK?
require([ 'dojo/topic', 'dojo/_base/window', 'hotplate/hotDojoWidgets/AlertBar' ], function(topic, win, AlertBar
){
globalAlertBar = new AlertBar({ background: '#FF4444' });
globalAlertBar.placeAt(document.body, 'first');
globalAlertBar.startup();
topic.subscribe('globalAlert', function(message, displayFor){
displayFor = displayFor || 2500;
globalAlertBar.set('message', message);
globalAlertBar.show(displayFor);
});
});
這讓我舉例來說,允許在應用程序中其他窗口小部件,以便顯示出alertBar發佈globalAlert
。 現在:
- 添加到要加載的JS列表的任何JS/Dojo文件都以「require」開頭。對我來說,這是簡單的異步代碼,將在加載後的某個時間點運行。在框架中以這種方式加載的大多數代碼將等待主題發佈,並將相應地採取行動
- 「應用程序」將只是其中一個模塊,它將訂閱發佈容器對象的主題
- 通過加載「正確的」 Dojo小部件需要()顯然將使用「定義」 - 這是一切照舊,沒有後顧之憂有
問題:
1)如果我在JS的一箇中運行ready()
/在頁面中引用的Dojo文件將是一個頁面級的ready(),包括所有加載的.js文件該文件?還是僅限於當前文件加載的文件? 2)我意識到,「正確的」做事方式是隻有一個運行require()
的JS文件,並從其中加載了一切(甚至使用data-dojo-main更好)。然而,我試圖定義模塊(帶有服務器和客戶端代碼),這些模塊獨立工作並將它們自己添加到頁面中......所以,實際上是不好的做法,在應用程序頁面中有一堆文件,然後讓它們require()
'正在運行的Dojo代碼?
謝謝!
Merc。
P.S. 如果你很好奇,https://github.com/mercmobily/hotplate ...這個項目在這裏發佈後發佈!
你見過jingo.js嗎?http://code.google.com/p/jingo/ –
是的,但它不在這個問題的範圍 - 在這裏,範圍是「Dojo」和AMD ... – Merc
['dojo/ready']( http://dojotoolkit.org/reference-guide/1.8/dojo/ready.html)註冊一個函數,當DOM準備就緒時運行,**所有未完成的require()調用已經解析**,以及其他已註冊的函數與更高的優先級已經完成。 – phusick