我有一个模型,其中 id 是必须由用户编写的代码,此代码将是数据库中的主键。
所以,要创建一个新的寄存器,我需要编写代码但是当我调用save()方法时,我期待一个POST,但是因为de idAttribute有一个值,所以我总是得到一个PUT。
这是我的模型非常简化
Course = Backbone.Model.extend({
idAttribute: "courseCode"
});
答案 0 :(得分:2)
正如杰克评论的那样,你应该使用id,而不是idAttribute。 (除非我们误解了,courseCode
是服务器上主键的名称;在这种情况下,继续。)
当您致电save()时,使用POST
或PUT
保留模型取决于isNew() function。默认实现将id与null进行比较,以确定模型是否已保存。您需要实现自己的isNew函数来确定是创建还是更新记录。例如,您可以尝试这样的事情:
Course = Backbone.Model.extend({
isNew: function() {
return !this.has('uniquePropertySetByServer');
}
});
答案 1 :(得分:1)
正如杰克所说,当你应该使用idAttribute
时,听起来你的第一个问题可能就是id
。除此之外,您对PUT的问题可以通过两种方式解决。
首先是告诉Backbone使用POST。一种方法是在你的模型上覆盖isNew
,正如Asheley Ross建议的那样。或者,您可以让Backbone使用它的原生isNew
方法,并通过删除它的ID属性(因为本地isNew
检查只是this.id == null
)强制它将模型视为新模型。然后,您可以在单独的属性中传递ID,或者作为属性(而不是属性)存储在模型上,并使用模型的toJSON
方法在将其发送到服务器之前将其添加回来。 / p>
第二种方法,它可以让你避免除GET和POST之外的所有HTTP操作都设置Backbone.emulateHTTPBackbone = true;
。这将使Backbone使用POST,而只是传递一个额外的请求标头X-HTTP-Method-Override
与实际类型(例如PUT
)。