覆盖时调用Mixin方法

时间:2014-02-09 11:43:04

标签: ember.js

我的控制器中有一个具有特定动作的Mixin。我需要覆盖此操作,执行一些操作,然后调用Mixin提供的原始操作。

我该怎么做?

this._super()似乎在这种情况下不起作用(这确实有意义,因为它意味着调用超类的实现,而不是Mixin的。)

1 个答案:

答案 0 :(得分:7)

要从this._super致电Ember.run.next,请尝试以下操作

http://emberjs.jsbin.com/docig/3/edit

App.MyCustomMixin = Ember.Mixin.create({
  testFunc:function(){
    alert('original mixin testFunc');
  },
  actions:{
    testAction:function(){
      alert('original mixin testAction');
    }
  }
});

App.IndexController = Ember.Controller.extend(App.MyCustomMixin,{
  testFunc:function(){
    alert('overriden mixin testFunc');

    var orig_func = this._super;
    Ember.run.next(function(){
      orig_func();
    });
  },
  actions:{
    test:function(){
      this.testFunc();
    },
    testAction:function(){
      alert('overriden mixin testAction');
      var orig_func = this._super;
      Ember.run.next(function(){
        orig_func();
      });
    }
  }
});