我的页面上有一个“取消”按钮,它应该将我所做的所有更改恢复为从服务器加载的状态..
我想我需要存储Backbonejs模型的初始状态,并将当前(已更改)状态恢复为初始状态。
实现这一目标的最佳方法是什么?
谢谢
答案 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
已更新,并可选择加入 在路由到新上下文之前提示确认。