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

ark*_*diy 23 backbone.js

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

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

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

谢谢

Der*_*ley 11

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


Dun*_*n_m 8

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


Tob*_*s J 8

model.previousAttributes()返回所有先前的属性,同时model.changedAttributes()返回所有已更改的属性,但返回其新值(或者false如果没有更改).所以你可以将它们结合起来cancelChanges在你的原型中编写一个方法:

var MyModel = Backbone.Model.extend({
    cancelChanges: function() {
        var changed = this.changedAttributes();

        if(!changed)
            return;

        var keys = _.keys(changed);
        var prev = _.pick(this.previousAttributes(), keys);

        this.set(prev, {silent: true}); // "silent" is optional; prevents change event
    },

});
Run Code Online (Sandbox Code Playgroud)