Backbone.js 现有模型上的.save()会导致POST而不是PUT

Backbone.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

我在保存对集合中单个模型的更改时遇到一些问题。已加载(通过collection.reset()加载)的模型将发出POST(好像它们是新的)而不是预期的PUT

以下是我采取的方法:

AppView

  • 通过这个.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字段的字段名。