我在保存集合中单个模型的更改时遇到了一些麻烦.已加载的模型(通过集合.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;
},
Run Code Online (Sandbox Code Playgroud)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();
Run Code Online (Sandbox Code Playgroud)观察:
谁能告诉我为什么会这样?
Der*_*ley 29
backbone使用模型的.id属性(非属性)来确定它是应该put还是post,如源代码所示: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"
});
Run Code Online (Sandbox Code Playgroud)