我一直在阅读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正在起作用,直到我知道才能继续前进。
答案 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从中得到它,所以我认为它可能是相同的。