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

标签 backbone.js

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

这是我正在采取的方法:

应用查看

  • 通过 this.model.childcollection.reset(JSON DATA FROM SERVER) 加载子集合;
  • 在它的渲染函数中,为集合中的每个项目创建一个新的 subview 并渲染它:
    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;
    },
    

  • 童视
  • 在其中一个事件中,它正在更改底层模型的一些值并调用保存:
    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模型的property(不是attribute)来决定是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"
    });
    

    关于backbone.js - 现有模型上的 .save() 会导致 POST 而不是 PUT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7473057/

    相关文章:

    javascript - 何时渲染模型以及何时渲染集合 - Backbone.js

    backbone.js - 主干 View 属性哈希未更新

    ruby - 我正在尝试使用 yeoman 和backbone 创建示例应用程序,但显示一些错误有人可以帮助我吗?

    backbone.js - model.save() 的更改事件在主干中触发两次

    java - Struts 1.x升级

    javascript - 在父 View 中触发 subview 模型方法: MarionetteJs

    backbone.js - Backbone Collection 0.9.9 - 添加事件不起作用

    javascript - Requirejs + Backbone 未捕获类型错误 : Cannot read property 'each' of undefined

    backbone.js - 主干 View 可以有多个 DOM 元素作为 $el

    javascript - Backbone Save() 不发送帖子