Я сейчас перевожу с 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
Есть ли способ решить эту проблему, оставив это ограниченным моделью? Я хотел бы избежать создания фабричной или строительной службы. Любая помощь будет высоко ценится.