Dojo:覆盖预加载的模块

弗雷德里克·福捷(Frederic Fortier)

我使用的都是预先构建的客户端应用程序,这些应用程序都是用Dojo 1.8(AMD风格)编写的,我需要对其进行扩展。

我可以访问源代码,但希望在可能的情况下保持不变,而希望覆盖(这是应用程序插件框架的工作方式,其他任何事情都将是hack)。

我的脚本仅在基本应用程序脚本之后加载。例如,我无法修改djConfig,也无法修改加载基本应用程序模块之前可能发生的任何其他情况。

这是我的问题:我想扩展一个基本应用程序类(使用声明创建),并在全局上应用我的覆盖-即使是在已经需要包含此类的模块的预加载模块上(但尚未实例化)。

到目前为止,我发现的最佳解决方案是使用require()为包含该类的模块添加别名。但这仅适用于需要注册别名的模块。

us

道场AMD装载机文档状态:

一旦将模块值输入到模块名称空间中,就不会在每次需要时重新计算它。在实际的水平上,这意味着工厂仅被调用一次,并且返回的值被缓存并在使用给定模块的所有代码之间共享(注意:dojo加载程序包括非标准函数require.undef,该函数未定义模块值。)

这意味着,如果您修改模块的原型,则更改将在整个应用程序中传播,甚至传播到更改之前创建的实例,因为这就是JavaScript的工作方式。

要修改通过创建的类的原型dojo/_base/declare,可以extend()在构造函数上定义一个方法:

require(['App'], function(App) {
    App.extend({
        run: function() {
            // override `run` method here         
        }
    });
});

实际操作中查看它:http : //jsfiddle.net/phusick/HxkFs/

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章