仅在Ember.js中提交后保留数据

时间:2013-10-10 22:16:59

标签: javascript ember.js

我正在使用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'))

也许我所描述的行为也是标准的?如果是这样,有没有办法阻止它?

1 个答案:

答案 0 :(得分:2)

您可以使用rollback中的DS.Model方法还原本地更改。

一个使用它的好地方,就是你的路线的deactivate方法,你有你的表格。因此,当用户退出路由时,deactivate将被执行,如果有一些脏数据,则会被清除。

您可能需要在OrganizationsNewRouteOrganizationEditRoute中使用相同的逻辑,因此您可以提取到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
});