1

我正在研究http://dojotoolkit.org/documentation/tutorials/1.7/hello_dojo/demo/module.html上的示例,并创建了一个目录结构,如下所示

w:/djt2/index.html
w:/djt2/js/mymodule.js  (exact copy of http://dojotoolkit.org/documentation/tutorials/1.7/hello_dojo/demo/myModule.js)

然后我将 Tinyweb 网络服务器设置为从 w:/djt2 为 localhost 提供服务

我做index.html了一点改动,以调整放入mymodule.js子目录js(我在下面也删除了评论):

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>Tutorial: Hello Dojo!</title>

    <script>
        var dojoConfig = {
            async: true,
            packages: [{
                name: "djt2",
                location: '/js'     /* Location #1 */
            }]
        };
    </script>
    <script src="//ajax.googleapis.com/ajax/libs/dojo/1.7.2/dojo/dojo.js"></script>
</head>
<body>
<h1 id="greeting">Hello</h1>
<script>
    require(["djt2/mymodule"], function(myModule){   /* Location #2 */
        myModule.setText("greeting", "Hello Dojo!");
        setTimeout(function(){
            myModule.restoreText("greeting");
        }, 3000);
    });
</script>
</body>
</html>

这行得通,但我不完全确定我理解为什么......特别是在位置 #1,原来的有location.pathname.replace(/\/[^/]+$/, '')它评估为空字符串并使加载程序在 CDN 位置查找 mymodule.js(我也试过将位置设置为"/",但这使它在http://mymodule.js/) 处搜索。

在位置 #2,前缀应该是djt2/……有点神秘。

如果有人可以解释它,或者将我引导到文档(我对学习新框架有点不知所措:-)。

4

1 回答 1

4

在你的结构中添加一个额外的djt2目录

w:/djt2/js/djt2/mymodule.js

在配置中设置 baseUrl。

var dojoConfig = {
    async: true,
    baseUrl: '/js'
    packages: [{
         name: "djt2",
         location: 'djt2'
    }]
};

设置 baseUrl 将告诉 dojo 在哪里寻找自定义模块。作为包一部分的位置是相对于 baseUrl 的。


我一直认为模块/包是命名空间。要使用附加包扩展您的示例,它将如下所示:

w:/djt2/js/another/anotherModule.js

var dojoConfig = {
    async: true,
    baseUrl: '/js'
    packages: [{
         name: "djt2",
         location: 'djt2'
    }, {
         name: "another",
         location: 'another'
    }]
};
于 2012-07-22T11:39:40.387 回答