Ember:在远离路线时自动销毁未通信的新模型实例

时间:2018-05-31 20:57:19

标签: ember.js ember-data

我有一条/posts/new路线用于创建新的post记录。我正在使用ember-form-for附加组件,它为创建表单提供帮助。您应该将form-for组件传递给对象,当您提交表单时,form-for会在对象上调用save()方法。所以看起来你应该直接将它传递给模型实例。

这意味着当我导航到此路线时,我需要自动创建一个新的post模型实例。只要我提交表单并创建新的模型实例,这一切都很好。但是如果我去这条路线然后离开而不提交(即保存)新实例呢?这似乎会在商店中留下一个未保存的模型实例。如果我离开路线,是否需要手动销毁此实例,还是有更优雅的方法来执行此操作?如果我确实需要手动销毁它,那么适当的钩子是什么? deactivate是一种路由方法,但我的新实例存储在控制器上。

注意:我已经看过this existing answer,但是从2013年开始。想知道现在是否有更清洁的东西。

1 个答案:

答案 0 :(得分:4)

由于您正在创建新模型,因此需要手动销毁它(将其回滚)。这可以在路由的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

相关问题