2013-08-29 12 views
5

Ostatnio Ember.js was updated so that action event handlers are defined in an actions object na trasach/kontrolerach/widokach. W rezultacie procedury obsługi zdarzeń nie są już normalnymi metodami na prototypie.Wywołanie `super` z obsługi zdarzeń na kontrolerze Ember

Jeśli podklasę kontrolera (na przykład) używa się extend, czy nadal można przesłonić, a następnie wywołać procedurę obsługi nadklasy?

Wystarczy nazywając _super nie działa:

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

Odpowiedz

4

Ember pozwala robić to, co staramy się robić. Oto JSFiddle który pokazuje, jak to działa:

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

Kiedy Ember jest stworzenie obiektu, to specjalnie zawija te funkcje tak, że mają _super dla nich dostępne.

Jeśli chcesz podzielić się większą częścią swojej implementacji, mogę spróbować ustalić, dlaczego Twój kod nie zachowuje się tak, jak demonstracja JSFiddle.

Powiązane problemy