Ember: автоматически уничтожать незафиксированный экземпляр новой модели при переходе от маршрута - PullRequest
0 голосов
/ 31 мая 2018

У меня есть маршрут /posts/new для создания новой записи post.Я использую дополнение ember-form-for , которое предоставляет помощники для создания форм.Вы должны передать компоненту form-for объект, а когда вы отправляете форму, form-for вызывает метод save() для объекта.Похоже, вы должны передать ему экземпляр модели напрямую.

Это означает, что мне нужно автоматически создать новый экземпляр post модели, когда я перейду к этому маршруту.Это все хорошо, пока я отправляю форму и создаю новый экземпляр модели.Но что, если я пойду по этому маршруту и ​​уйду без отправки (т.е. сохранения) нового экземпляра?Кажется, это оставит несохраненный экземпляр модели валяться в магазине.Нужно ли мне вручную уничтожать этот экземпляр, если я ухожу от маршрута, или есть какой-то более элегантный способ сделать это?Если мне нужно вручную уничтожить его, какой подходящий крючок?deactivate - это метод маршрута, но мой новый экземпляр хранится на контроллере.

ПРИМЕЧАНИЕ: я видел этот существующий ответ , но это с 2013 года. Интересно, есть ли что-нибудь более чистое доступноеТеперь.

1 Ответ

0 голосов
/ 01 июня 2018

Поскольку вы создаете новую модель, вам необходимо вручную уничтожить ее (откатить назад).Это можно сделать в хуке маршрута resetController.Примерно так:

// Your route.js file
import Route from '@ember/routing/route';
import { get } from '@ember/object';

export default Ember.Route.extend({
  model() {
    return get(this, 'store').createRecord('some-model');
  },
  resetController(controller, isExiting) {
    if (isExiting) {
      get(controller, 'model').rollbackAttributes();
    }
  }
});

См .: https://emberjs.com/api/ember-data/3.1/classes/DS.Model/methods/rollbackAttributes?anchor=rollbackAttributes

...