【问题标题】:How to load custom AMD modules when using Dojo via CDN?通过 CDN 使用 Dojo 时如何加载自定义 AMD 模块?
【发布时间】:2012-01-03 00:01:52
【问题描述】:

我正在使用谷歌的 CDN,并尝试使用他们的加载器加载我自己的 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 是模块的位置。

【问题讨论】:

    标签: javascript dojo amd


    【解决方案1】:

    我在这里找到了方法: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>
    

    【讨论】:

    • 这就是我喜欢 require.js 的原因——它在 AMD 模块的跨域加载方面没有问题。
    【解决方案2】:

    我正在使用的另一个应该起作用的选项是这个。注意“.js”。不知何故,加载器会以不同的方式对待它。

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

    请参阅:http://dojotoolkit.org/reference-guide/1.8/loader/amd.html

    如果 moduleId 以协议(例如,“http:”)或正斜杠开头,或以“.js”后缀结尾,则假定请求是针对 JavaScript 的任意块,而不是模块。

    我不知道这是否是最佳做法。

    【讨论】:

      猜你喜欢
      • 2013-10-28
      • 2016-01-21
      • 1970-01-01
      • 2012-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多