2012-06-01 13 views
16

私はEmberのドキュメントを参照していますが、initをオーバーライドするときに_superメソッドが呼び出されている場所の不一致が確認されています。Ember.js this._super()を呼び出す場所

これは、それが実際にした最も一般的であり、私はthis write upて読んでいた最後の夜、これまで

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

を使用していたものであり、この

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配列を取得し、それを処理するためです。あなたは配列にdescriptionViewを追加する前_superと呼ばれる場合、それは....

ので、私は推測するんだけど、それはそれはSproutcoreで働く方法です、エンバーが由来するんどんなinitによって処理されませんでした私はそれはおそらく同じだと思う。

+0

はい、 'child'配列を初期化した後に' super'の 'init'を呼び出すと、2回レンダリングしなければならないオーバーヘッドがなくなります。 –

関連する問題