Dojo中的包定位是如何工作的

How does package location work in Dojo?

本文关键字:何工作 工作 定位 包定位 Dojo      更新时间:2024-01-18

我正在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 web服务器设置为从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/有点神秘。。。

如果有人能解释一下,或者指导我查看文档(我对学习一个新框架有点不知所措:-)。

在结构中添加一个额外的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'
    }]
};