Как обрабатывать устаревший хук жизненного цикла "готовой" модели в 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
}
Другие вопросы по тегам