17

Ember のドキュメントを調べたところ、_superオーバーライド時にメソッドが呼び出される場所に一貫性がないことがわかりinitました。

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

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 が異常をきたしており、それがわかるまで先に進むことができません。

4

1 に答える 1

14

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

 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に追加する前に呼び出した場合、何をしても処理されません....descriptionViewinit

推測ですが、Emberの元になったSproutcoreでもそうなので、多分同じだと思います。

于 2012-06-01T15:30:15.840 に答える