在Ember.js中,有很多函数需要您在调用它们之前调用this._Super(... arguments)。文档中的quick example:
import Component from '@ember/component';
export default Component.extend({
didRender() {
this._super(...arguments);
console.log('I rendered!');
}
});
在Ember中是否有不需要呼叫this._super()
的情况?我问的原因是因为通常我会为我的控制器或路由写一些钩子,而我只是忘了调用this._super(...arguments)
,而据我所知,一切都一样。
在覆盖Ember中的任何成员函数之前,我应该始终包括一个super()
方法吗?
答案 0 :(得分:1)
是的。在一个长期丢失的线程中,有人曾经告诉我,覆盖方法不一定能通过semver来保证,因此,如果向当前不做任何事情的上游方法中添加了某些内容,则我应该始终调用super以避免将来出现异常。 >
答案 1 :(得分:1)
是的,您应该始终这样做。如果您不这样做,则ember将不会执行在后台处理内容的代码,这将导致您可能无法调试的奇怪行为。
P.S:作为实验,只需尝试在应用程序中的任何路由中覆盖setupController方法,而无需调用this._super(... arguments),然后看看会发生什么。
答案 2 :(得分:1)
是的,您最好包括this._super
,尽管在大多数情况下不是“必须”。
我只有一个地方知道这是关键-init
。如上所述,很可能也是constructor
,但是我不需要覆盖构造函数。但是,请考虑以下问题:
this._super
可能有助于避免错误didRender
。但是,如果您将来需要更改该怎么办?因此,尽管在大多数情况下包括this._super
并不重要,但无论如何都应包括在内。除非您打算完全覆盖默认行为,否则。