Backbone.js 现有模型上的.save()会导致POST而不是PUT
我在保存对集合中单个模型的更改时遇到一些问题。已加载(通过collection.reset()加载)的模型将发出POST(好像它们是新的)而不是预期的PUT 以下是我采取的方法: AppViewBackbone.js 现有模型上的.save()会导致POST而不是PUT,backbone.js,Backbone.js,我在保存对集合中单个模型的更改时遇到一些问题。已加载(通过collection.reset()加载)的模型将发出POST(好像它们是新的)而不是预期的PUT 以下是我采取的方法: AppView 通过这个.model.childcollection.reset(来自服务器的JSON数据)加载子集合 在其render函数中,为集合中的每个项目创建一个新的子视图,并对其进行渲染: render: function() { var el = this.el; this
- 通过这个.model.childcollection.reset(来自服务器的JSON数据)加载子集合
- 在其render函数中,为集合中的每个项目创建一个新的子视图,并对其进行渲染:
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; },
- 在其中一个事件中,它正在更改基础模型的某些值并调用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();
- 调用POST(无子id)而不是PUT(有子id)
- 子元素已设置ID
有人能告诉我为什么会发生这种情况吗?主干网使用模型的
.id
属性(而不是属性)来确定它应该放置还是发布,如源代码中所示:
如果在保存现有模型时正在执行post,则表示未正确加载.id
属性。即使调用model.get(“id”)
返回正确的结果,调用model.id
也必须返回正确的结果,才能知道这不是新模型
请确保您的模型的id属性被称为id
,如果不是,请确保在您的模型上设置idAttribute
:
MyModel = Backbone.Model.extend({
idAttribute: "myCustomId"
});
谢谢-这似乎是问题所在-服务器端模型上的“Id”属性名称已大写。将其更改为小写似乎已经解决了此问题。或者,您可以在扩展Backbone.Model时使用
idAttribute
选项更改主干考虑ID字段的字段名。