我正在研究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/
...
如果有人可以解释它,或者指示我阅读文档(我对学习新框架感到有些不知所措: - )。
答案 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'
}]
};