我在保存集合中各个模型的更改时遇到了一些问题。已加载的模型(通过集合.reset())发出POST(好像它们是新的)而不是预期的PUT。
这是我正在采取的方法:
APPVIEW
通过this.model.childcollection.reset(JSON DATA FROM SERVER)加载子集合;
在它的渲染功能中,为集合中的每个项目创建一个新的子视图并渲染它:
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
在其中一个事件中,它正在更改基础模型的某些值并调用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();
观察:
有人能告诉我为什么会这样吗?
答案 0 :(得分:29)
backbone使用模型的.id
属性(非属性)来确定它是应该放置还是发布,如源代码中所示:https://github.com/documentcloud/backbone/blob/master/backbone.js#L344-346
如果在保存现有模型时正在发帖,则表示未正确加载.id
属性。即使对model.get("id")
的调用返回了正确的结果,对model.id
的调用也必须返回正确的结果,以便知道这不是新模型。
确保您的模型的id属性名为id
,如果不是,请务必在模型上设置idAttribute
:
MyModel = Backbone.Model.extend({
idAttribute: "myCustomId"
});