我一直在浏览Ember文档,发现在重写init
时调用_super
方法的位置不一致。
这是最常见的,也是我到目前为止一直在使用的
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
。
有人能解释这个吗?我的强迫症代码出问题了,我不知道怎么处理就不能继续。
发布于 2012-06-01 23:30:16
在链接的文档中
init: function() {
var childViews = this.get('childViews');
var descriptionView = App.DescriptionView.create();
childViews.pushObject(descriptionView);
this.addButton();
return this._super();
},
在创建descriptionView并将其推送到childViews
数组之后,将调用_super()
。
这是因为超类init
实现将获取childViews数组并对其执行操作。如果您在将descriptionView
添加到数组之前调用_super
,则无论init
执行什么操作,它都不会得到处理。
我是在推断,但这是Sproutcore的工作方式,Ember就是从Sproutcore派生出来的,所以我认为它可能是相同的。
https://stackoverflow.com/questions/10852988
复制相似问题