Ember.js在哪里调用this._super()

时间:2012-06-01 15:18:12

标签: javascript ember.js method-overriding

我一直在阅读Ember文档,并且看到在覆盖_super时调用init方法的位置不一致。

这是最常见的,也是我到目前为止所使用的

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正在起作用,直到我知道才能继续前进。

1 个答案:

答案 0 :(得分:14)

在链接的文档中

 init: function() {
    var childViews = this.get('childViews');
    var descriptionView = App.DescriptionView.create();
    childViews.pushObject(descriptionView);
    this.addButton();
    return this._super();
  },
在创建descriptionView之后调用

_super()并将其推送到childViews数组。

那是因为超类init实现将采用childViews数组并用它来做事。如果您在将_super添加到数组之前调用descriptionView,那么init无法处理它。

我在推断,但这就是它在Sproutcore中运作的方式,Ember从中得到它,所以我认为它可能是相同的。