I’m having some trouble saving changes to individual models in a collection. Models that have been loaded (via a collection .reset()) are issuing a POST (as if they were new) instead of the expected PUT.
Here’s the approach I’m taking:
AppView
-
Loads the child collection via this.model.childcollection.reset(JSON DATA FROM SERVER);
-
In it’s render function, creates a new childview for each item in the collection and renders it:
render: function() { var el = this.el; this.model.childcollection.forEach(function(s) { var view = new ChildView({ model: s }); el.append(view.render().el); }); return this; },
ChildView
-
In one of its events it is changing some values of the underlying model and calling save:
this.model.set( { ValueA: somevalue, ValueB: somevalue }, { error: function() { console.log("Error saving model"); }, success: function() { console.log("Model change saved"); } }); this.model.save();
Observations:
- POST (with no child id) is called instead of PUT (with child Id)
- Child elements have Ids set
Can anyone tell me why this may be happening?
backbone used the
.idproperty (not attribute) of the model to determine whether it should put or post, as shown here in the source code: https://github.com/documentcloud/backbone/blob/master/backbone.js#L344-346if it’s doing a post when saving an existing model, this means the
.idproperty wasn’t loaded correctly. even if a call tomodel.get("id")returns the right result, a call tomodel.idmust return the right result for it to know that this is not a new model.be sure you’re model’s id attribute is called
id, or if it’s not, be sure to set theidAttributeon your model: