我使用的都是预先构建的客户端应用程序,这些应用程序都是用Dojo 1.8(AMD风格)编写的,我需要对其进行扩展。
我可以访问源代码,但希望在可能的情况下保持不变,而希望覆盖(这是应用程序插件框架的工作方式,其他任何事情都将是hack)。
我的脚本仅在基本应用程序脚本之后加载。例如,我无法修改djConfig,也无法修改加载基本应用程序模块之前可能发生的任何其他情况。
这是我的问题:我想扩展一个基本应用程序类(使用声明创建),并在全局上应用我的覆盖-即使是在已经需要包含此类的模块的预加载模块上(但尚未实例化)。
到目前为止,我发现的最佳解决方案是使用require()为包含该类的模块添加别名。但这仅适用于需要注册别名的模块。
该道场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] 删除。
我来说两句