正确清理代码

时间:2013-02-10 15:17:02

标签: ember.js coffeescript ember-data

我有以下两个编辑和新路线:

WZ.ExercisesNewRoute = Em.Route.extend
  model: ->
    WZ.Exercise.createRecord()
  deactivate: ->
    @_super.apply this, arguments
    @get('currentModel.transaction').rollback()

WZ.ExercisesEditRoute = Em.Route.extend
  model: (params) ->
    WZ.Exercise.find(params.exercise_id)
  serialize: (params, options) ->
    exercise_id: params.get('id')
  deactivate: ->
    @_super.apply this, arguments
    tx = @get('currentModel.transaction')
    tx.rollback() if tx

我想知道每次取消激活时应该使用正确的代码,以便在用户不保存,保存或其他任何内容时,商店处于正确的状态。

目前,如果我路由到编辑路线,然后直接转到新路线而不保存,我会收到以下错误:

  

未捕获错误:尝试处理事件willSetProperty    而在状态rootState.deleted.saved。   用{reference:[object Object]调用,存储:,   name:name}

1 个答案:

答案 0 :(得分:1)

这个问题适用于较旧版本的ember数据,但答案应该首先检查isDeleted的状态,如果记录尚未删除则仅回滚。

在较新的ember数据中,没有事务概念,但如果您尝试回滚尚未保留的记录,则仍会遇到类似的问题。

我可能会在路由器willTransition事件中执行此操作,因为如果您希望为用户提供保存更改的选项,则可以执行中止转换的操作。

  willTransition: function(transition) {
    controller = this.get('controller')
    if( controller.get('content.isDirty') ) {
     if( controller.get('content.isNew') && confirm('Closing this window will revert all unsaved changes.') ){
       controller.get('content').deleteRecord();
     } else {
       controller.get('content').rollback()
     }
    }
  }