2016-05-23 64 views
0

我剛開始學習RequireJs,但無法使用它的自定義縮寫名稱加載js依賴項。我不明白我做錯了什麼在這裏,我嘗試只用「基因敲除」加載淘汰賽JS庫,但如果我用「敲除3.4.0」它的工作原理,它拋出一個錯誤RequireJs不會按名稱加載腳本

Error: Script error for "knockout" 
http://requirejs.org/docs/errors.html#scripterror 

不錯,但我寧願使用縮短的

<!DOCTYPE html> 
 
<html> 
 
\t <head> 
 
\t \t <script type="text/javascript" data-main="js/init.js" src="js/require.js"></script> 
 
\t </head> 
 
    <body> 
 
     <h1 data-bind="text: TabIndx">Hello World</h1> \t \t 
 
\t \t <script> 
 
\t \t require(['knockout', 'viewModel'], function(ko, viewModel) { 
 
\t \t \t var vm = new viewModel(); 
 
\t \t \t ko.applyBindings(vm); 
 
\t \t }); 
 
\t \t </script> 
 
    </body> 
 
</html>

require.config({ 
 
\t baseUrl: 'js', 
 
    paths: { 
 
     knockout: 'knockout-3.4.0', 
 
\t \t viewModel: 'viewModel' 
 
    } 
 
});

+0

是'init.js'你在哪裏定義'require.config '?你可以發佈'init.js'的全部內容嗎? – Shakespeare

回答

1

我懷疑這是因爲在您請求本地路徑之前,RequireJS尚未完全加載自身及其自定義配置。你應該怎麼做如果你正在使用RequireJS有一個模塊負責創建視圖模型和應用綁定,如你的例子。

// app.js 
define(['knockout', 'viewModel'], function (ko, viewModel) { 
    var vm = new viewModel(); 
    ko.applyBindings(vm); 
}); 

require.config({ 
    baseUrl: './js/', 
    paths: { 
     knockout: 'knockout-3.4.0', 
     viewModel: 'viewModel', 
     app: 'app' 
    } 
}); 

我不知道怎麼init.js的外觀,但在這裏我已負責啓動app.js文件的小模塊。

define(['app'], function (app) { 
    app.init(); 
}); 

你的配置應該理想地被重構到它自己的文件,其中require-config.js只包含你的配置片段,像這樣: -

<script type="text/javascript" data-main="js/init.js" src="js/require.js"></script> 
<script type="text/javascript" src="js/require-config.js"></script> 
+0

謝謝,我現在明白了,我在init.js中有自己的配置代碼,但它是異步加載的,沒有及時加載,因此出現錯誤消息。 – chillydk147