Ember.js中应该在哪里调用this._super()?

17

我一直在阅读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

有人能解释一下吗?我的代码强迫症作祟,除非我知道了,否则我无法继续。

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数组执行某些操作。如果在将descriptionView添加到数组之前调用_super,它将不会被init所做的任何处理处理...

我可以推断,在Ember派生的Sproutcore中也是这样工作的。


啊,是的,在初始化childView数组之后调用superinit将消除两次渲染的开销。 - Ilia Choly

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接