【问题标题】:How does package location work in Dojo?包定位在 Dojo 中是如何工作的?
【发布时间】:2012-07-21 17:36:06
【问题描述】:

我正在研究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 子目录中(我在下面也删除了cmets):

<!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 位置(我也尝试将位置设置为"/",但这使它在http://mymodule.js/ 进行搜索)。

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

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

【问题讨论】:

    标签: javascript dojo


    【解决方案1】:

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

    【讨论】:

    • 嗯.. 没用。它试图从http://localhost/djt2/js/djt2/mymodule.js 获取mymodule.js,但由于我是从w:/djt2 服务的,因此根目录下没有djt2 文件夹。如果我将 baseUrl 更改为 "/js" 它可以工作。如果我将 baseUrl 更改为 "/js/djt2" 并删除包定义,它也可以工作......
    • 我错过了 localhost 映射到 djt2 的部分。是的,baseUrl 应该是 /js。 Dojo 将在 /js 的 djt2 目录中查找以 djt2 开头的模块定义
    • /me 想知道当需要 dijit 或 dojox(位于 google cdn 中)时会发生什么
    • 我有一个使用 CDN 的沙盒应用程序,并且在 Web 服务器上有一个自定义模块,它工作正常。 dojo、dijit 和 dojox 是从 cdn 加载的。来自网络服务器的自定义模块。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-11
    • 2011-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-04
    • 2011-02-20
    相关资源
    最近更新 更多