gpt4 book ai didi

backbone.js - 使用复合键时,Backbone 对更新执行 POST 而不是 PUT

转载 作者:行者123 更新时间:2023-12-04 02:58:20 25 4
gpt4 key购买 nike

我在我的模型中使用复合键并根据我的复合键生成 ID:

app.Assignment = Backbone.Model.extend({
idAttribute : [ 'personId', 'jobId' ],
parse : function(resp) {
resp.id = resp.personId + "_" + resp.jobId;
return resp;
}
});

但是 Backbone 仍然认为所有的 Assignment 实例都是新的,尽管我在从 API 获取它们时在 parse 方法中设置了 id。因此,Backbone 不执行 DELETE 操作,而是在更新时执行 POST 而不是 PUT。我该如何解决这个问题,或者什么是“正确的方法”?

更新:

看起来用 this.id 替换 resp.id 解决了这个问题。

最佳答案

parse的结果Backbone.Model 的方法被传递给 set方法,它设置模型的属性。我认为你的困惑点是模型的 ID 不是它的属性之一;这是它的特性之一。

所以,发生的事情是这样的:

  • 您的原始数据从服务器返回并传递给 parse
  • 同样的原始数据,现在增加了 id属性,传递给 set
  • set看起来和你的 idAttribute ( [ 'personId', 'jobId' ] ) 和原始数据中的所有键
  • 由于这些键都不匹配 idAttribute ,它们都没有用作模型的 ID,因此您会遇到问题。

  • 您的设置解决方案 this.idparse工作,但它可能会导致问题,因为 parse 通常旨在对其输入(原始数据)进行操作,而不是修改模型本身;那部分应该在 set 时发生叫做。更清洁的解决方案是执行以下操作:
    app.Assignment = Backbone.Model.extend({
    // note that no idAttribute is specified, leaving it as the default "id"
    parse : function(resp) {
    resp.id = resp.personId + "_" + resp.jobId;
    return resp;
    }
    }

    或者,如果您想要不同的 ID 属性...
    app.Assignment = Backbone.Model.extend({
    idAttribute: 'personAndJobId',
    parse : function(resp) {
    resp.personAndJobId = resp.personId + "_" + resp.jobId;
    return resp;
    }
    }

    关于backbone.js - 使用复合键时,Backbone 对更新执行 POST 而不是 PUT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15199615/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com