1

我有一个模型,其id是必须由用户编写的代码,该代码将是数据库上的主键。

因此,要创建一个新寄存器,我需要编写代码,但是当我调用 save() 方法时,我期待一个 POST,但是因为 de idAttribute 有一个值,所以我总是得到一个 PUT。

这是我的模型非常简化

Course = Backbone.Model.extend({
    idAttribute: "courseCode"
});
4

2 回答 2

2

正如杰克评论的那样,您应该使用id,而不是idAttribute。(除非我们误解了,并且courseCode是服务器上主键的名称;在这种情况下,继续。)

模型是使用保存POST还是PUT调用save()取决于isNew() 函数。默认实现将id与 null 进行比较,以确定模型是否已保存。您将需要实现自己的 isNew 函数来确定是创建还是更新您的记录。例如,您可以尝试这样的事情:

Course = Backbone.Model.extend({
    isNew: function() {
        return !this.has('uniquePropertySetByServer');
    }
});
于 2013-01-02T21:23:12.030 回答
1

正如杰克所说,听起来你的第一个问题可能是idAttribute在你应该使用id. 除此之外,您的 PUT 问题可以通过两种方式解决。

第一个是告诉 Backbone 使用 POST。isNew正如 Asheley Ross 建议的那样,一种方法是覆盖您的模型。或者,您可以让 Backbone 使用它的本机方法,并简单地通过删除它的 ID 属性(因为本机检查只是)isNew来强制它将您的模型视为新模型。然后,您可以在单独的属性中传递 ID,或者作为属性(而不是属性)存储在模型上,并在将其发送到服务器之前使用模型的方法将其添加回来。isNewthis.id == nulltoJSON

第二种方法可以让您避免除 GET 和 POST 之外的所有 HTTP 操作,即设置Backbone.emulateHTTPBackbone = true;. 这将使 Backbone 使用 POST 代替,并且只需传递一个X-HTTP-Method-Override带有实际类型的额外请求标头(例如。PUT)。

于 2013-01-02T21:25:45.567 回答