2012-10-13 38 views
1

我認爲我缺少一些東西。我讀過你可以使用RequireJS而不是使用Dojo加載器來使用dojo模塊。我對RequireJS和定義模塊感到半舒服,但似乎無法弄清楚發生了什麼。我查看了dojo js文件,發現它們使用的是define(),就像我聲明自己的模塊時一樣。我的文件被組織這樣無法加載包含RequireJs的Dojo模塊

// File path 
-js 
    main.js 
    - lib 
     .require.js 
     -dojo 
      // All dojo files 

我不知道我錯過了什麼,但是當我試圖加載模塊道場的價值是不確定的。 繼承人一些示例HTML:

// index.html 
<html> 
    <head> 
    </head> 
    <body> 
     // include require script & set main.js 
     <script data-main="js/main" src="js/lib/require.js"></script> 
    </body> 
</html> 

和樣本main.js文件...

// Sample main.js file 

    // BaseUrl = js/ 

    require.config({ 
     packages : [ 
      name  : 'dojo', 
      location : 'lib/dojo'; 
     ] 
    }); 

    require(['dojo', 'dojo/dom'], function(dojo, dom) { 

     // 'dojo'  should load dojo/main.js 
     // 'dojo/dom' should load dojo/dom.js 

     // But they have a value of "undefined" when I look at them in the console 
     console.log(dojo); 
    }); 

任何想法我做錯了嗎?作爲一個側面說明有時我得到這個錯誤在控制檯

TypeError: _3.add is not a function 
[Break On This Error] 

_3.add("dom-addeventlistener",!!document.addEventListener); 

在此先感謝!

+0

相當舊的帖子,但我想知道如果你有requirejs和dojo加載 –

回答

0

首先,你的包配置定義爲對象的數組:

require.config({ 
    packages : [ 
     { 
      name  : 'dojo', 
      location : 'lib/dojo'; 
     } 
    ] 
}); 

後,好了,你應該檢查你的devtools網絡選項卡,確保require.js加載正確的文件和路徑很好。請記住location是相對於baseUrl

希望得到這個幫助!

+0

是不是包的配置應該是包的對象數組/對象?而且我知道這個位置是相對於baseUrl的。在我的例子中,'dojo'應該加載js/lib/dojo/main.js。但dojo對象的值爲「undefined」... –

+0

那麼,如果你不需要特殊設置,你可以在配置中定義'name',但是你需要一個對象: require.config ({ 軟件包:[ 「購物車」, { 名: 「存儲」, 主: 「存儲」 } ] }); –

0

_3是一個指標,表明您正在使用dojo的縮小的獨立分佈。如果你想用不同的加載器來使用Dojo,我相信你想使用their download page的Source/SDK下載。

0

_3.add("dom-addeventlistener",!!document.addEventListener);實際上has.add("dom-addeventlistener", !!document.addEventListener);

是錯誤_3.add is not a function由事實requirejs不像道場的AMD實現不定義has.js API造成的。 Dojo試圖從AMD加載器中提取has.js實現。如果使用外部加載器,則必須通過dojoConfig指明它。當運行一個縮小的構建需要將staticHasFeatures添加到生成配置文件:

staticHasFeatures: { 
    "dojo-has-api": 0 // default 1 
} 

這樣做已經解決了這個問題對我來說。

Further info

0

把所有道場文件夾的js。

您的文件夾結構應該像

// Folder structure 
-js 
    -dojo 
    -dijit 
    -dojox 

注:請確保您的訪問提供給JS/*路徑。這樣的URL:http://localhost:8080/app/js/dojo/dojo.js訪問。

然後,使用requireJS使用以下腳本添加道場模塊,

setTimeout(

    function() { 
     var dojoConfig = { 
      async : true 
     }; 

    require.config({ 
     packages : 
      [ { 
       name : 'dojo', 
       location : '../js/dojo' 
      } ],  
    }); 

    require(
     [ 'dojo', 'dojo/dom' ], 
     function(dojo, dom) { 
      console.log(dojo); 
      dom.byId("myDiv").innerHTML = "updatedHTML content"; 
    }); 

}, 1000); 

這就是它。