装载机配置
Dojo 在 Dojo 1.7 中收到了一个新的加载器,以适应工具包的新 AMD 模块格式。这个新的加载器添加了一些新的配置选项,这些选项对于定义包,映射等至关重要。有关加载程序的详细信息,请参阅高级 AMD 使用教程。重要的加载器配置参数包括
baseUrl:将模板标识符转换为路径或 URL 时前缀的基本 URL。
baseUrl: "/js"
packages:提供包名称和位置的对象数组:
packages: [{
name: "myapp",
location: "/js/myapp"
}]
map:允许你将模块标识符中的路径映射到不同的路径:
map: {
dijit16: {
dojo: "dojo16"
}
}
paths:模块 id 片段到文件路径的映射:
var dojoConfig = {
packages: [
"package1",
"package2"
],
paths: {
package1: "../lib/package1",
package2: "/js/package2"
}
};
// ...is equivalent to:
var dojoConfig = {
packages: [
{ name: "package1", location: "../lib/package1" },
{ name: "package2", location: "/js/package2" }
]
};
async:定义是否应异步加载 Dojo 核心。值可以是 true,false 或 legacyAsync,这会将加载程序永久置于传统的跨域模式中。
async: true
parseOnLoad:如果为 true,则在加载 DOM 和所有初始依赖项(包括 dojoConfig.deps 数组中的那些依赖项)时,使用 dojo / parser 解析页面。
parseOnLoad: true
It is recommended that parseOnLoad be left at false (it defaults to false, so you can simply omit this property), and that developers explicitly require dojo/parser and call parser.parse().
deps:一旦加载 Dojo 后应立即加载的资源路径数组:
deps: ["dojo/parser"]
回调:检索到 deps 后执行的回调:
callback: function(parser) {
// Use the resources provided here
}
waitSeconds:模块信号加载超时之前等待的时间; 默认为 0(永远等待):
waitSeconds: 5
cacheBust:如果为 true,则将时间作为查询字符串附加到每个模块 URL 以避免模块缓存:
cacheBust: true
现在让我们创建一个简单的演示,它将使用基本参数。一种非常常见的情况是使用 CDN 中的 Dojo Toolkit 和本地模块。
假设我们在/documentation/tutorials/1.10/dojo_config/demo
空间中使用带有模块的 Google CDN:
<!-- Configure Dojo first -->
<script>
dojoConfig = {
has: {
"dojo-firebug": true,
"dojo-debug-messages": true
},
// Don't attempt to parse the page for widgets
parseOnLoad: false,
packages: [
// Any references to a "demo" resource should load modules locally, *not* from CDN
{
name: "demo",
location: "/documentation/tutorials/1.10/dojo_config/demo"
}
],
// Timeout after 10 seconds
waitSeconds: 10,
map: {
// Instead of having to type "dojo/domReady!", we just want "ready!" instead
"*": {
ready: "dojo/domReady"
}
},
// Get "fresh" resources
cacheBust: true
};
</script>
<!-- Load Dojo, Dijit, and DojoX resources from Google CDN -->
<script src="//ajax.googleapis.com/ajax/libs/dojo/1.10.4/dojo/dojo.js"></script>
<!-- Load a "demo" module -->
<script>
require(["demo/AuthoredDialog", "dojo/parser", "ready!"], function(AuthoredDialog, parser) {
// Parse the page
parser.parse();
// Do something with demo/AuthoredDialog...
});
</script>
通过使用包配置,我们已经将所有对 demo/*
的引用指向我们的本地/documentation/tutorials/1.10/dojo_config/demo/
目录,同时允许任何对 dojo
,dijit
和 dojox
的引用来自 Google CDN。如果没有定义演示包,demo/AuthoredDialog
的请求将转到//ajax.googleapis.com/ajax/libs/dojo/1.10.4/dojo/demo/AuthoredDialog.js
。我们还使用了别名,将 ready 与 dojo/domReady
联系起来。