web-dev-qa-db-ja.com

これを呼び出すEmber.js._super()

Emberのドキュメントを確認しましたが、initをオーバーライドするときに_superメソッドが呼び出される場所に矛盾が見られます。

これは最も一般的で、私がこれまで使用してきたものです

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は機能していて、私が知るまで先に進むことができません。

17
Ilia Choly

リンクされたドキュメントで

_ 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_を呼び出した場合、initが実行する処理は実行されません。

私は推測していますが、それがSproutcoreでの動作方法であり、そこからEmberが派生するので、おそらく同じだと思います。

14
hvgotcodes