在运行时将包添加到 dojo 配置

Posted

技术标签:

【中文标题】在运行时将包添加到 dojo 配置【英文标题】:Adding a package to dojo config at runtime 【发布时间】:2012-11-14 16:07:41 【问题描述】:

有没有办法可以将新包添加到 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。

谢谢。

【问题讨论】:

【参考方案1】:

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

Eg:

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

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

我认为可以将一个额外的对象推送到 dojoConfigrequire.rawConfig 但加载程序不会拾取这些对象。加载后似乎无法更改配置。

你可以传递一个配置对象给require,所以:

Eg.

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

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

这将适用于单个 require,但不会修改全局配置(因此在 define() 或对 require() 的后续调用中不起作用)。同样,我在这里使用 1.8,但我认为它适用于 1.7

可能有另一种更简单的方法可以使其他人发现这项工作?

【讨论】:

谢谢斯蒂芬! dojoConfig.packages.push("name": "myLib", "location": "release/myLib");为我工作。【参考方案2】:

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

但是the documentation 也提到了对我有用的paths 参数。在你的情况下:

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

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

以前是dojo.registerModulePath("myModule", "/path/goes/here");

【讨论】:

以上是关于在运行时将包添加到 dojo 配置的主要内容,如果未能解决你的问题,请参考以下文章

Java:在运行时将类添加到 Jar 存档

在运行时将带有绑定的控件添加到 Xamarin ListView?

如何在运行时将新用户添加到 Spring Security

在运行时将 CORS 映射动态添加到 Rest Controller

在运行时将jar添加到类路径

在运行时将一个游戏对象组件添加到另一个具有值的游戏对象中