ember must call super method from component 错误

ember must call super method from component error

我只是用我的自定义混合扩展我的 ember 组件 class 但不幸的是我的日志说了一个错误

    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

但是在我的组件(post-item)中我被声明为我的 init 方法

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

这是我的基地控制器class

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); 时。错误消失了...

谁能解决这个问题:( ...

函数init()一直存在并定义在Ember中(即使不是你自己写的)。 init() 将在幕后做几件事,以确保您的 Ember 应用程序中的所有内容都正常工作。

通过扩展您自己的 init() 版本,重要的是在您编写任何需要编写的内容之前保留 init() 所做的关键功能。

这就是为什么你应该打电话给 this._super(...arguments);。否则你基本上会破坏 Ember 因为你覆盖了一些重要的功能。

所以基本上,您实际上需要 this._super(...arguments);,在 init() 函数的开头,以便一切正常工作。这就是为什么注释掉它会给你一个错误。如果你取消注释,那么一切都会好起来的。

想法是您需要调用 Ember.Component 中定义的 init,如果不这样做,您将收到断言错误。

Ember.Component
   basecontroller (this._super is referring to Ember.Component)
      post-item (this._super is referring to basecontroller)   

只是为了到达父级 class,即 Ember.Component。我们需要在所有地方 this._super。始终为 init 方法调用 this._super(...arguments) 是良好做法。