如何回滚backbone.js模型的变化?

时间:2011-06-28 05:00:56

标签: backbone.js

我的页面上有一个“取消”按钮,它应该将我所做的所有更改恢复为从服务器加载的状态..

我想我需要存储Backbonejs模型的初始状态,并将当前(已更改)状态恢复为初始状态。

实现这一目标的最佳方法是什么?

谢谢

4 个答案:

答案 0 :(得分:11)

FWIW - 我写了一个插件来自动处理这个问题,特别是考虑到“取消”按钮的想法:http://github.com/derickbailey/backbone.memento

答案 1 :(得分:8)

我不相信有一个方法调用将模型返回到未编辑状态..但是未编辑的值可以通过model.previous(属性)单独获得,也可以通过model.previousAttributes单独获得。

答案 2 :(得分:2)

以下是我提出的建议:

var RollbackEnabledModel = Backbone.Model.extend({
  initialize: function() {
    this._initAttributes = _.clone(this.attributes);
  },
  parse: function(data) {
    this._initAttributes = _.clone(data);
    return data;
  },
  rollback: function() {
    this.set(this._initAttributes);
  }
});

答案 3 :(得分:0)

看看NYTimes'backbone.trackit。它会跟踪模型的多个更改,而不是仅跟踪model.changedAttributes()model.previousAttributes()等最新更改。来自自述文件:

var model = new Backbone.Model({id:1, artist:'Samuel Beckett', 'work':'Molloy'});
model.startTracking();

model.set('work', 'Malone Dies');
console.log(model.unsavedAttributes());  // >> Object {work: "Malone Dies"}

model.set('period', 'Modernism');
console.log(model.unsavedAttributes());  // >> Object {work: "Malone Dies", period: "Modernism"}

model.save({}, {
    success: function() {
        console.log(model.unsavedAttributes());  // >> false
    }
});
  

此外,该库还为resetAttributes添加了功能   它们自上次保存以来的原始状态,触发事件时   状态unsavedChanges已更新,并可选择加入   在路由到新上下文之前提示确认。