如果我有一个类似下面的类,是否可以创建一个具有相同功能的子类但是会覆盖其中一个“要求”?
我正在尝试在下面的示例中使用我自己的/ registry版本。感谢
define([
"dojo/_base/declare",
"dojo/query",
"../registry",
], function(declare, query, registry){
return declare("dijit.form._SearchMixin" {
// Original Base code
答案 0 :(得分:1)
我不认为这是可能的。子类并不是真正继承自应该是" dynamic"的模块,但它只取决于它。
如果您想更改依赖模块,可以将其封装在模块内的字段中,例如:
define([
"dojo/_base/declare",
"dojo/query",
"../registry"
], function(declare, query, registry) {
return declare("dijit.form._SearchMixin", {
registry: registry,
aFunction: function() {
this.registry.doStuff();
}
});
});
现在您可以创建它的子类并覆盖registry
属性。只需确保所有交互都通过registry
属性引用的模块。
在很多情况下,Dojo会这样做,它在下拉菜单中使用,拖放,......。
答案 1 :(得分:1)
如果你的意思是这样的话:
你有一些使用modulA
的课程define(["modulA"], function(modul){
return declare("classA", [], {
doSomething: function() {
modul.doSomething()
}
})
});
然后你在classA的基础上声明另一个类,它应该使用modulB:
define(["classA", "modulB"], function(classA, modulB) {
// do something magical so that doSomething will use modulB
return declare("classB", [classA]) {}
})
如果不覆盖使用modulA的所有函数,则无法实现。如果它是您的代码,您可以使用动态绑定模块以支持此类多态的方式编写它:
define([], function(){
return declare("classA", [], {
// dynamic binding, it can be overwritten
modulName: "modulA",
doSomething: function() {
require([this.modulName, function(modul) {
// you must take into account, you're in async code now
modul.doSomething()
}
}
})
});