2012-06-01 2 views
16

Я проходил обработку документации Ember и вижу несогласованность в том, когда вызывается метод _super при переопределении init.Ember.js где позвонить this._super()

Это является наиболее распространенным и является то, что я использую до сих пор

var Foo = Em.Object.extend({ 
    init: function(){ 
     this._super(); 
     // ... my stuff ... 
    } 
}); 

вчера вечером я читал через this write up и увидел пример, делая это

var Bar = Em.Object.extend({ 
    init: function(){ 
     // ... my stuff ... 
     return this._super(); 
    } 
}); 

Это было на самом деле Ember.ContainerView в фрагменте кода.

Может ли это объяснить это? Мой код OCD действует, и я не могу двигаться дальше, пока не узнаю.

ответ

13

В документации связана

init: function() { 
    var childViews = this.get('childViews'); 
    var descriptionView = App.DescriptionView.create(); 
    childViews.pushObject(descriptionView); 
    this.addButton(); 
    return this._super(); 
    }, 

_super() называется ПОСЛЕ descriptionView создается и помещается в childViews массив.

Это потому, что реализация суперкласса init будет принимать массив childViews и делать с ним вещи. Если вы назвали _super перед добавлением descriptionView в массив, он не будет обрабатываться любым init делает ....

Я выводя, но это так, как это работает в SproutCore, из которого вытекает Ember, так Я думаю, что это, вероятно, то же самое.

+0

Ах да, вызывая 'init'' super' после инициализации массива 'childView', удаляет служебные данные, связанные с визуализацией дважды. –

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