Javascript 从Ember控制器上的事件处理程序调用“super”

Javascript 从Ember控制器上的事件处理程序调用“super”,javascript,ember.js,Javascript,Ember.js,最近,在管线/控制器/视图上。因此,事件处理程序不再是原型上的常规方法 如果您使用extend对一个(例如)控制器进行子类化,是否仍然可以覆盖并调用该超类的处理程序 仅调用\u super不起作用: FormController = Em.ObjectController.extend({ actions: { submit: function() { this.get('model').save(); } } }); SpecialFormController

最近,在管线/控制器/视图上。因此,事件处理程序不再是原型上的常规方法

如果您使用
extend
对一个(例如)控制器进行子类化,是否仍然可以覆盖并调用该超类的处理程序

仅调用
\u super
不起作用:

FormController = Em.ObjectController.extend({
    actions: {
        submit: function() { this.get('model').save(); }
    }
});

SpecialFormController = FormController.extend({
    actions: {
        submit: function() {
            this.set('special', true);
            this._super(); // doesn't work
        }
    }
});

余烬使你可以做你想做的事。下面是一个JSFIDLE,演示了它是如何工作的:

当余烬创建一个对象时,它会专门包装这些函数,这样它们就可以使用超级

如果您想分享更多的实现,我可以尝试帮助您找出代码的行为方式与JSFIDLE演示不同的原因

App.BaseController = Em.ArrayController.extend({
  actions: {
    nameAlert: function(person){
      window.alert('alert from BaseController: ' + person.lastName + ', ' + person.firstName);
    }
  }
});

App.IndexController = App.BaseController.extend({
  actions: {
    nameAlert: function(person){
      this._super(person);
      window.alert('alert from IndexController: ' + person.lastName + ', ' + person.firstName);
    }
  }
});