19

我有以下两条用于编辑和新建的路线:

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], store: , name: name} 调用

4

1 回答 1

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()
     }
    }
  }
于 2014-01-28T19:28:08.960 回答