Ember.js, где вызывать this._super() - программирование
Подтвердить что ты не робот

Ember.js, где вызывать this._super()

Я просматриваю документацию 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 действует, и я не могу двигаться дальше, пока не узнаю.

4b9b3361

Ответ 1

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

 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, поэтому я думаю, что он, вероятно, тот же.