2013-08-29 2 views
5

Недавно, Ember.js was updated so that action event handlers are defined in an actions object на маршрутах/контроллерах/представлениях. В результате обработчики событий больше не являются нормальными методами на прототипе.Вызов `супер` от обработчика событий на контроллере Ember

Если вы подклассифицируете контроллер (например) с помощью 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

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.

Смежные вопросы