JS Controller在回调中调用parent?

时间:2015-06-01 14:25:01

标签: javascript inheritance extjs

我有一个由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()。但这听起来很难看 - 有什么更好的建议吗?

提前致谢 - 感谢您的帮助!

1 个答案:

答案 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));

但我不确定你的情况下这个/自我/超类的价值是什么......