Ember:离开路线时自动销毁未提交的新模型实例
Ember: Automatically destroy uncommited new model instance when navigating away from route
我有一条 /posts/new
路线用于创建新的 post
记录。我正在使用 ember-form-for 插件,它提供了创建表单的帮助程序。您应该向 form-for
组件传递一个对象,当您提交表单时,form-for
调用该对象的 save()
方法。所以看起来您应该直接将模型实例传递给它。
这意味着当我导航到这条路线时,我需要自动创建一个新的 post
模型实例。只要我提交表单并创建新的模型实例,这一切都很好。但是,如果我转到这条路线然后没有提交(即保存)新实例就离开了怎么办?看起来这会在商店中留下一个未保存的模型实例。如果我离开路线,是否需要手动销毁此实例,或者是否有更优雅的方法来执行此操作?如果我确实需要手动销毁它,合适的钩子是什么? deactivate
是一种路由方法,但我的新实例存储在控制器上。
注意:我看过 this existing answer,但它是 2013 年的。想知道现在是否有更清洁的东西。
由于您正在创建一个新模型,您需要手动销毁它(将其回滚)。这可以在路由的 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();
}
}
});
我有一条 /posts/new
路线用于创建新的 post
记录。我正在使用 ember-form-for 插件,它提供了创建表单的帮助程序。您应该向 form-for
组件传递一个对象,当您提交表单时,form-for
调用该对象的 save()
方法。所以看起来您应该直接将模型实例传递给它。
这意味着当我导航到这条路线时,我需要自动创建一个新的 post
模型实例。只要我提交表单并创建新的模型实例,这一切都很好。但是,如果我转到这条路线然后没有提交(即保存)新实例就离开了怎么办?看起来这会在商店中留下一个未保存的模型实例。如果我离开路线,是否需要手动销毁此实例,或者是否有更优雅的方法来执行此操作?如果我确实需要手动销毁它,合适的钩子是什么? deactivate
是一种路由方法,但我的新实例存储在控制器上。
注意:我看过 this existing answer,但它是 2013 年的。想知道现在是否有更清洁的东西。
由于您正在创建一个新模型,您需要手动销毁它(将其回滚)。这可以在路由的 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();
}
}
});