0

调用超级方法,我只是延长我的灰烬成分与我的自定义类混入但不幸的是我的日志说错误烬必须从组件的错误

Assertion Failed: You must call `this._super(...arguments);` when overriding `init` on a framework object. Please update <[email protected]:post-item::ember395> to call `this._super(...arguments);` from `init`. 
Error 

但在我的组件(项目后)我已经宣布我的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 

,这是我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);。错误走了......

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

回答

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)是Good Practice。

+0

好主意..我会尝试它。谢谢.. – cahyowhy

1

功能init()始终存在,并在灰烬(即使你没有把它写自己)的定义。init()会做几幕后的东西,使你的Ember公司的应用程序确保一切工作正常。

通过扩展自己的init()版本,它是你保留该init()没有你写之前,任何你需要编写一个关键功能是非常重要的。

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

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

相关问题