回滚删除以处理Ember.js中的服务器错误

回滚删除以处理Ember.js中的服务器错误,ember.js,ember-data,Ember.js,Ember Data,我们有一个Ember.js应用程序,它使用Ember数据。我们正努力做到以下几点: 删除记录 如果出现服务器错误(由于应用程序可能处于无法删除记录的“锁定”状态),请将记录回滚到以前的状态,提示用户解锁应用程序,然后继续 如果没有服务器错误,请继续正常操作 我们发现这是行不通的 object.destroyRecord().then -> # handle success , (reason)-> object.rollback() # prompt for the un

我们有一个Ember.js应用程序,它使用Ember数据。我们正努力做到以下几点:

  • 删除记录
  • 如果出现服务器错误(由于应用程序可能处于无法删除记录的“锁定”状态),请将记录回滚到以前的状态,提示用户解锁应用程序,然后继续
  • 如果没有服务器错误,请继续正常操作
  • 我们发现这是行不通的

    object.destroyRecord().then ->
      # handle success
    , (reason)->
      object.rollback()
      # prompt for the unlock
    
    在这两种情况下,我们都会看到如下错误:

    Error: Assertion Failed: calling set on destroyed object
    
    但不清楚设置后如何删除
    isDestroyed
    状态

    一般来说,在这两种情况下,一旦调用DistroyRecord,即使出现服务器错误,也无法将更改回滚到预删除状态一次。

    尝试,然后保存。文档明确声明,这允许您在发生错误时回滚

      object.deleteRecord()
      object.save().then( ->
         # handle success
      , (reason) ->
         object.rollback()
      )
    

    我发现需要将回滚调用放入becameError()函数中

    // Overwrite default destroyRecord
    destroyRecord: function () {
        this.deleteRecord();
        this.save().then(
            function (){
                //Success
            },
            function () {
                //Failure
            }
        );
    },
    
    becameError: function (item) {
        this.rollback();
    }
    

    该项将从视图中消失,直到服务器返回错误,然后神奇地重新出现

    我也试过了,结果也一样。我们可以在调用save之前回滚删除。但是一旦调用了save,服务器返回了一个错误,似乎就没有一个简单的方法来恢复这个对象了。也许这是值得澄清的一个问题,在灰烬数据回购?没有使用灰烬数据在一段时间,因为我感到失望,但我看到了这个线程在论坛上。不确定您是否看过,或者是否与您的问题相关,但可能值得一读: