0

我只是用我的自定义 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

但在我的组件(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

这是我的基本控制器类

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);在我的基本控制器中取消注释此语法时。错误消失了...

任何人都可以解决这个问题:( ...

4

2 回答 2

1

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

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

这就是你应该打电话的原因this._super(...arguments);。否则,您实际上会破坏 Ember,因为您正在覆盖一些重要的功能。

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

于 2017-07-28T02:34:04.810 回答
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在所有地方。总是调用this._super(...arguments)init 方法是很好的做法。

于 2017-07-28T05:25:56.607 回答