我使用RequireJS在ASP.NET。有一個用戶控件包含一個腳本文件,並註冊一個啓動腳本以便自行初始化。下面是生成的代碼:如何同步加載腳本與RequireJS
<script src="script/UserControls/myctrl.js" type="text/javascript"></script>
...
<script type="text/javascript">
function myCtrl1_init() {
// initialize control
// *JS ERROR* because myctrl.js hasn't run yet
Sys.Application.remove_load(myCtrl1_init);
}
Sys.Application.add_load(myCtrl1_init);
</script>
的myctrl.js文件看起來是這樣的:
require(['script/dep1', 'script/dep2'], function(dep1, dep2) {
MyCtrl = function() {
};
MyCtrl.init = function(id) {
dep1.doSomething();
}
};
所以,問題是,啓動腳本之前運行myctrl.js文件有機會運行。目前,require調用使用回調函數,顯然直到後來才運行,這就是問題......腳本返回並且瀏覽器在MyCtrl創建之前繼續執行啓動腳本。
我試圖簡單地調用require(['script/dep1', 'script/dep2']);
在文件的頂部,但這並不阻止或者,因爲依賴尚未加載腳本失敗。順便說一下,依賴關係是模塊。他們使用define()
。
有沒有辦法與RequireJS同步加載腳本文件? API文檔指出:「在具有同步加載的服務器端JavaScript環境中使用RequireJS應該與重新定義require.load()一樣簡單,但我不知道這意味着什麼。
有什麼建議嗎?
那麼,異步完成整個初始化,呃?似乎是合理的,但我可以指望在myCtrl1_init觸發時完成加載的DOM嗎? – alekop 2011-03-09 07:44:58
@jburke,這個作品,謝謝。 – alekop 2011-03-10 08:24:02
如果您想確保在DOM準備好後myCtrl1_init被觸發,請使用require.ready()包裝代碼。需要([「myctrl」],函數(){require.ready(函數(){函數myCtrl1_init ..... – jrburke 2011-03-12 06:39:27