装载机配置

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/目录,同时允许任何对 dojodijitdojox 的引用来自 Google CDN。如果没有定义演示包,demo/AuthoredDialog 的请求将转到//ajax.googleapis.com/ajax/libs/dojo/1.10.4/dojo/demo/AuthoredDialog.js。我们还使用了别名,将 ready 与 dojo/domReady 联系起来。