我只是用我的自定义mixins类扩展我的ember组件,但不幸的是我的日志说错误
Assertion Failed: You must call `this._super(...arguments);` when overriding `init` on a framework object. Please update <cahyowhy-mini-blog@component:post-item::ember395> to call `this._super(...arguments);` from `init`.
Error
但是在我的组件(后期项目)中,我已经被宣布为我的初始化方法
import Ember from 'ember';
import BaseController from '../controllers/base-controller';
import Likepost from '../models/likepost';
export default Ember.Component.extend(BaseController, {
posts: "",
applyLayout(){
Ember.$(document).ready(function () {
let $grid = Ember.$('#post-container').imagesLoaded(function () {
$grid.masonry({
itemSelector: '.post-item',
percentPosition: true,
columnWidth: '.post-item',
});
});
});
},
init(){
this._super(...arguments);
},
..... more code
这是我的basecontroller类
import Ember from 'ember';
export default Ember.Mixin.create({
init(){
//this._super(...arguments); //nek ra dipanggil neng component post item ra keno :(
let afterRenderExist = this.afterRender !== undefined && typeof this.afterRender === "function";
if (this.applicationRoute.documentReady && afterRenderExist) {
Ember.run.schedule('afterRender', this, function () {
this.afterRender();
});
} else if (afterRenderExist) {
this.applicationRoute.on('onDocumentReady', this, function () {
this.afterRender();
});
}
},
但是当我尝试在基本控制器中取消注释此语法this._super(...arguments);
时。错误消失了......
任何人都可以解决这个问题:( ...
答案 0 :(得分:1)
函数init()
始终存在并在Ember中定义(即使您没有自己编写)。 init()
将在幕后做几件事,以确保Ember应用程序中的所有内容都正常工作。
通过扩展自己的init()
版本,在编写需要编写的内容之前,保留init()
所执行的关键功能非常重要。
这就是你应该拨打this._super(...arguments);
的原因。否则你基本上会破坏Ember,因为你要覆盖一些重要的功能。
基本上,在this._super(...arguments);
函数的开头,实际上需要init()
才能使一切正常运行。这就是为什么评论它会给你一个错误。如果你取消注释,那么一切都会好的。
答案 1 :(得分:1)
想法是你需要调用在init
中定义的Ember.Component
如果不这样做,那么你会得到一个断言错误。
Ember.Component
basecontroller (this._super is referring to Ember.Component)
post-item (this._super is referring to basecontroller)
只需访问Ember.Component
的父类。我们需要在所有地方this._super
。始终为init方法调用this._super(...arguments)
是良好实践。