10

我正在使用谷歌的 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是模块的位置。

4

2 回答 2

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>
于 2012-01-03T00:15:02.490 回答
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 块,而不是模块。

我不知道这是否是最佳实践。

于 2013-02-07T18:34:30.827 回答