如何处理 ember-data 中已弃用'ready'模型生命周期挂钩?



我目前正在从Ember 2.18转到Ember 3.16。在我的模型中,如果创建了新实例,我会使用ready函数为关系创建默认值。

// app/models/human.js
import Model, { hasMany } from '@ember-data/model';
export default Model.extend({
personalities: hasMany('personality')
ready () {
// because you should have at least one
if (this.isNew) {
this.get('personalities').pushObject(this.store.createRecord('personality'));
}
}
});

ready函数具有在访问this.isNew时正确设置整个内部状态的优点。

尝试转换到ES6类方法会产生这样的结果:

// app/models/human.js
import Model, { hasMany } from '@ember-data/model';
export default class HumanModel extends Model {
@hasMany('personality') personalities;
constructor () {
super(...arguments);
// because you should have at least one
if (this.isNew) {
this.personalities.pushObject(this.store.createRecord('personality'));
}
}
}

但这失败了,因为this.isNew还不能访问内部状态。

TypeError: Cannot read property 'currentState' of null

有没有一种方法可以通过将其限制在模型中来解决这个问题?我希望避免创建工厂或建筑商服务。任何帮助都将不胜感激。

使用init((方法而不是构造函数(init方法不推荐使用(。据我所知,建议组件使用构造函数,而不是模型

init() {
this._super(...arguments);
//your code here
}

最新更新