How to Clone Models in Backbone How to Clone Models in Backbone javascript javascript

How to Clone Models in Backbone


You could use the clone method. Short example below:

var Model = Backbone.Model.extend({});var View = Backbone.View.extend({    initialize: function() {        this.realModel = this.model;        this.model = this.realModel.clone();    },    onSave: function() {        this.realModel.set(this.model.attributes);    }});

You could also do something a bit different:

var Model = Backbone.Model.extend({});var View = Backbone.View.extend({    initialize: function() {        // save the attributes up front, removing references        this._modelAttributes = _.extend({}, this.model.attributes);    },    onSave: function() {        // revert to initial state.        this.model.set(this._modelAttributes);    }});


You can give Backbone.Memento a try.

If you don't want to use it no problem. But, You can get a good idea about how it should be done from the codebase.


I usually solve this issue with an object cache on the view. That way I don't add any unnecessary overhead to model/view management. Discarding happens naturally if the user closes out of a view without saving.

var Model = Backbone.Model.extend({    'title': 'Hello'});var View = Backbone.View.extend({    initialize: function() {        // Holds temporary values until save        this.cache = {};    },    onTitle: function() {        this.cache.title = 'World';    },    onSave: function() {       this.model.set( this.cache );    }});