Как обрабатывать устаревший хук жизненного цикла "готовой" модели в ember-data?
Сейчас я перехожу с 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'));
}
}
});
У функции готовности была прелесть того, что все внутреннее состояние устанавливается правильно при доступе к 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
Есть ли способ решить эту проблему, оставив это в рамках модели? Я бы не хотел создавать фабрику или строительную службу. Любая помощь приветствуется.
1 ответ
Используйте метод init() вместо конструктора (метод init не является устаревшим). Насколько я понимаю, использование конструктора рекомендуется для компонентов, а не для моделей.
init() {
this._super(...arguments);
//your code here
}