在运行时向dojo配置添加包

时间:2012-11-14 16:07:42

标签: javascript dojo

有没有办法可以为dojo配置添加新包?我知道我可以这样做:在dojo.js加载时添加包。

<script src='dojo_1.7.2/dojo/dojo.js' 
    data-dojo-config="async:true,isDebug:true,parseOnLoad:false,
      packages:[{name:'project1',location:'../../js/proj1'},
        {name:'common',location:'../../common'}]"></script>

我希望能够在运行时添加新包。

dojo.registerModulePath 在dojo1.6之前完成了这项工作(我认为),但现在已经弃用了1.7

我正在使用dojo 1.7.2。

感谢。

2 个答案:

答案 0 :(得分:5)

您可以在加载后通过使用config对象调用require来添加额外的包。

Eg:

require({
    packages: [
        {"name": "myLib", "location": "release/myLib"}
    ]
});

然而,根据文档(dojo/_base/config),这将创建另一个Dojo实例。此外,这是版本 1.8 代码;我不认为它适用于 1.7

我认为可以将额外的对象推送到 dojoConfig require.rawConfig ,但这些不会被加载器拾取。加载后似乎无法更改配置。

您可以将配置对象传递给require,所以:

Eg.

dojoConfig.packages.push({"name": "myLib", "location": "release/myLib"});

require(dojoConfig, [...moduleIds...], function(...arguments...) {
});

这适用于个人需求,但不会修改全局配置(因此无法在 define()或后续调用 require()时使用。我再次使用 1.8 ,但我认为它适用于 1.7

可能还有另一种更简单的方法可以让其他人找到这项工作吗?

答案 1 :(得分:0)

Stephen Simpson的解决方案似乎不适用于dojo v1.13。它忽略了给定的位置,尽管项目路径以basePath开头,但它仍在尝试相对于默认/加载文件。我的控制台也出现了错误。

但是the documentation也提到了对我有用的paths参数。就您而言:

require({paths:{"project1": "../../js/proj1", …}});

它可能对您有用,因为您使用的是相对路径,而我没有。

它曾经是dojo.registerModulePath("myModule", "/path/goes/here");