Как обработать устаревшую «готовую» ловушку жизненного цикла модели в ember-data? - PullRequest
0 голосов
/ 14 марта 2020

Я сейчас перевожу с 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

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

...