2013-08-07 5 views
3

Допустим, у меня есть это:Вызов метода «базового класса» от протяженного объекта

App.ControllerMixin = Ember.Mixin.create({ 
    setupController : function (entry) { 
     ... 
    } 
}); 

App.BaseEditController = Ember.ObjectController.extend(App.ControllerMixin, { 
    startEditing: function() { 
     ... 
     this.setupController(entry); 
    }, 

}); 

App.ServicesEditController = App.BaseEditController.extend(App.ServicesMixin, { 
    setupController : function (entry) { 
    } 
}); 

Как я могу позвонить ControllerMixin.setupController из ServicesEditController.setupController?

ответ

3

Вы можете назвать методы из суперклассов с помощью this._super(). Как правило, рекомендуется добавить этот вызов к каждому методу, который вы переопределяете.

App.ServicesEditController = App.BaseEditController.extend(App.ServicesMixin, { 
    setupController : function (entry) { 
     this._super(entry); 
    } 
}); 

Расширение на мой посоветую добавить этот вызов каждый перекрытый метод, это пример Mixin для просмотра. Если ваш Mixin переопределяет didInsertElement, вы всегда должны добавлять вызов к this._super(). Это гарантирует, что вызовы «all» didInsertElement будут вызваны, если применяются несколько Mixins.

App.SomeViewMixin = Ember.Mixin.create({ 
    didInsertElement : function(){ 
    this._super(); 
    // ... perform your logic 
    } 
}); 
+1

Позвольте мне получить это прямо: вы имеете в виду, что 'this._super (запись)' вызывается из * в * 'setupController' будет автоматически вызывать метод' setupController' на супер класс? Это означает, что '_super' вызывает метод, названный как метод, из которого он вызывается? Магия! :) – dangonfast

+0

Да, так оно и работает :-) – mavilein

+1

Если вы переопределите метод Mixin в контроллере, this._super(), похоже, не вызывает метод Mixin. Как я могу это сделать? – elsurudo

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