2012-01-03 87 views
10

我正在使用谷歌的CDN,並試圖使用他們的加載程序加載我自己的AMD模塊。我知道我做錯了什麼,但我被卡住了。有任何想法嗎?如何通過CDN使用Dojo時加載自定義AMD模塊?

<script src="https://ajax.googleapis.com/ajax/libs/dojo/1.7.0/dojo/dojo.js" 
      type="text/javascript" data-dojo-config="async:true,parseOnLoad:true"></script> 
    <script type="text/javascript"> 
     require(["dojo/_base/kernel", "dojo/_base/loader", "dojo/parser"], function(dojo){ 
      dojo.registerModulePath("pgGallery", "http://127.0.0.1:8080/js"); 
     }); 
     require(["pgGallery/Message"], function(m){ 
      m.success("foo"); 
     }); 
    </script> 

http://127.0.0.1:8080/js/Message.js是模塊的位置。

回答

11

我想出瞭如何在這裏:http://dojotoolkit.org/reference-guide/quickstart/cross-domain.html「使用本地模塊使用CDN」。

從頁面的例子:

<script type="text/javascript"> 
    var dojoConfig = { 
     async: true, 
     packages: [ 
      { 
       name: "my", 
       location: "/absolute/path/to/local/modules" 
      } 
     ] 
    }; 
</script> 

<!-- Bootstrap Dojo From Google's CDN --> 
<!-- removing the protocol from src url auto detects if current page is served via http or https and also loads the dojo resources from matching protocol --> 
<script 
    type="text/javascript" 
    src="//ajax.googleapis.com/ajax/libs/dojo/1.7.1/dojo/dojo.js"> 
</script> 

<script type="text/javascript"> 
    require(["my/FooModule"], function(FooModule){ 
     // ... 
    }); 
</script> 
+0

這就是爲什麼我喜歡require.js--它對AMD模塊的跨域加載沒有任何問題。 – Lucero 2012-01-03 00:36:51

0

是這樣運作的另一種選擇,這是我現在用的就是這個。請注意「.js」。不知何故,加載程序以不同的方式處理。

require(["pgGallery/Message.js"], function(m){ 
     m.success("foo"); 
    }); 

參見:http://dojotoolkit.org/reference-guide/1.8/loader/amd.html

如果的moduleId與協議開頭(例如,「HTTP:」)或正斜線,或以」的.js」後綴結束,假定該請求是對JavaScript的任意塊,而不是一個模塊。

我不知道的是,如果這是最佳實踐與否。

相關問題