我正在使用Ember.js和Ember-Data。用户可以创建和更新资源,例如Organization
模型。在大多数情况下,系统按预期工作。一个例外是,如果用户部分填写表单,然后离开页面而不单击提交。部分创建的资源将在客户端持久存在。 (它从未提交到服务器,因此从未存在于数据库中。如果用户重新加载页面,这些部分创建的资源将消失。)
我的路线很标准:
Whistlr.OrganizationsNewRoute = Ember.Route.extend
model: ->
@store.createRecord('organization')
setupController: (controller, model) ->
controller.set('content', model)
Whistlr.OrganizationEditRoute = Ember.Route.extend
model: (params) ->
@store.find('organization', params.organization_id)
setupController: (controller, model) ->
controller.set('content', @modelFor('organization'))
也许我所描述的行为也是标准的?如果是这样,有没有办法阻止它?
答案 0 :(得分:2)
您可以使用rollback
中的DS.Model
方法还原本地更改。
一个使用它的好地方,就是你的路线的deactivate方法,你有你的表格。因此,当用户退出路由时,deactivate
将被执行,如果有一些脏数据,则会被清除。
您可能需要在OrganizationsNewRoute
和OrganizationEditRoute
中使用相同的逻辑,因此您可以提取到mixin:
Whistlr.CleanupRecordDataMixin = Ember.Mixin.create({
deactivate: function() {
this.get('controller.content').rollback();
}
});
Whistlr.OrganizationsNewRoute = Ember.Route.extend(Whistlr.CleanupRecordDataMixin, {
// other methods
});
Whistlr.OrganizationEditRoute = Ember.Route.extend(Whistlr.CleanupRecordDataMixin, {
// other methods
});