为什么建议不要super
覆盖EmberJs模型对象init
方法?
我实现了这段代码,它工作得很好(现在,我猜):
import Ember from 'ember';
export default Ember.Object.extend({
init() {
this._super();
if (!this.get('type')) {
this.set('type', this.get('typeDefault'));
}
},
});
init
上的EmberJs文档是here
这是一篇不推荐它的文章。
答案 0 :(得分:1)
覆盖init绝对没有问题。在某些情况下,你必须。常见的替代方法是使用init
事件,但实际上应该调用此事件afterInit
,因为它是在创建对象后调用的,并且在这种情况下使用set
会导致观察者触发
这篇文章反驳了你所引用的文章:https://dockyard.com/blog/2015/10/19/2015-dont-dont-override-init
调用init
的正确方法:
init(...args) {
this._super(...args);
// ...
}
或者如果您不使用Babel:
init: function() {
this._super.apply(this, arguments);
// ...
}
答案 1 :(得分:1)
在您引用的文章中引用了一些人不推荐它的原因。如果您忘记调用this._super(...args)
并且您的父模型也会覆盖init
函数,则不会调用父模型init!
只要你总是调用超级类,覆盖init
函数就不会有害。