【问题标题】:Revert change to ember data model恢复对 ember 数据模型的更改
【发布时间】:2012-06-11 18:07:24
【问题描述】:

有没有办法轻松恢复对 Ember Data 模型的更改?

我有一个绑定到编辑视图的模型。此视图使用户能够取消编辑,此时我想恢复对模型的更改。有没有一种简单的方法可以在不克隆所有值的情况下做到这一点?

【问题讨论】:

  • object.get('transaction').rollback()

标签: ember.js ember-data


【解决方案1】:

Ember Data 支持事务的概念。我们可以创建一个事务并将 Ember 数据记录分配给它们,如果我们想要撤消更改,我们可以调用事务 rollback() 方法。此外,如果我们不创建显式事务,则将记录分配给默认事务,可以通过调用 DS.store 对象本身的 rollback() 方法来回滚。

【讨论】:

  • 谢谢!为了完整起见,Ember 数据源中有一个很好的交易记录。阅读 DS.Transaction 定义上方的注释块
  • 事务的注释块还说我们可以在默认事务的情况下直接在存储对象上运行“提交”或“回滚”。当我尝试进行回滚时,出现错误:TypeError: Object has no method 'rollback' 对此有什么帮助吗?
【解决方案2】:

默认事务的名称名为“defaultTransaction”。事实上,当 Embers 提交时,它使用这个默认事务。不能直接在store上直接使用rollback。

你应该有类似的东西,而不是使用 store.rollback:

store.get('defaultTransaction').rollback()

或(如果您在路由器事件管理器中)

event.get('store.defaultTransaction').rollback()

【讨论】:

    【解决方案3】:

    如果模型处于“isDirty”状态,您也可以对模型本身执行rollback

    this.get('model').rollback();
    

    例子

    export default Ember.ObjectController.extend({
    
     actions: {
        cancelEditModel: function(){
    
            this.get('model').rollback();
    
            this.transitionToRoute('...');
    
            return false;
        }
      }
    });
    

    【讨论】:

      【解决方案4】:

      从 Ember Data 版本 2 开始,不再有交易,但您可以将模型重置为保存版本之前的最后状态:

      model.rollbackAttributes();
      

      【讨论】:

        猜你喜欢
        • 2015-11-13
        • 1970-01-01
        • 2015-01-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多