我有一个由childcontroller扩展的控制器。这个孩子需要首先显示一个元素,然后提升覆盖的父函数。这是我抽象的代码:
Ext.define('ParentController', {
extend: 'Ext.app.Controller',
//lot of code
myFunction(){
//....
this.getSomething();
}
}
然后有一个控制器扩展现有的控制器:
Ext.define('ChildController', {
extend: ParentController,
onlyChildFunction(dummy){
//create element
...
element.onClosed = function(){
dummy();
}
return element;
}
//override
myFunction(){
//this.callParent();
var element = onlyChildFunction( this.self.superclass.myFunction() );
element.show();
}
传递超类函数不起作用,因为ParentController使用了很多对ParentController实例的引用(this)。
我不想直接从ParentController复制代码,因为这意味着要保持两次相同的功能。一种方法是再次调用element.onClosed上的myFunction()并在那里制作某种标志只做callParent()。但这听起来很难看 - 有什么更好的建议吗?
提前致谢 - 感谢您的帮助!
答案 0 :(得分:0)
如果我理解正确,onlyChildFunction必须传递一个Function。 (这里,您传递的是调用父类myFunction
的返回值。)
这样的事情会起作用吗?
Ext.define("ChildController", {
...
myFunction : function () {
var that = this;
var element = onlyChildFunction( function () {
that.self.superclass.myFunction()
});
...
}
}
这个想法是你传递一个在正确的上下文中调用“父”函数的函数。 在这种情况下,您可能能够使用bind功能达到同样的效果:
var element = onlyChildFunction(this.self.superclass.myFunction.bind(this));
但我不确定你的情况下这个/自我/超类的价值是什么......