包位置如何在Dojo中运行?

时间:2012-07-21 17:36:07

标签: javascript dojo

我正在研究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(/\/[^/]+$/, '')评估为空字符串并使加载器查找mymodule.js在CDN位置(我还尝试将位置设置为"/",但这使其在http://mymodule.js/搜索。

在位置#2,前缀应为djt2/ ...

,这有点神秘

如果有人可以解释它,或者指示我阅读文档(我对学习新框架感到有些不知所措: - )。

1 个答案:

答案 0 :(得分:3)

在您的结构中添加额外的djt2目录

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

在配置中设置baseUrl。

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

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


我一直认为模块/包是nameapces。要使用其他包扩展您的示例,它将如下所示:

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

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