5

最近,Ember.js 进行了更新,以便在actions对象中定义动作事件处理程序在路由/控制器/视图上因此,事件处理程序不再是原型上的普通方法。

如果您使用(例如)控制器子类化extend,是否仍然可以覆盖然后调用超类的处理程序?

只是调用_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
        }
    }
});
4

1 回答 1

4

Ember 使您可以做您想做的事情。这是一个 JSFiddle,它演示了它是如何工作的:

http://jsfiddle.net/HzjUG/1/

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);
    }
  }
});

当 Ember 创建对象时,它会专门包装这些函数,以便它们可以使用 _super。

如果您想分享更多您的实现,我可以尝试帮助您找出为什么您的代码不像 JSFiddle 演示那样运行。

于 2013-08-29T19:14:41.983 回答