Backbone.js发布模型

时间:2013-01-02 20:53:50

标签: backbone.js backbone-model

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

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

这是我的模型非常简化

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

2 个答案:

答案 0 :(得分:2)

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

当您致电save()时,使用POSTPUT保留模型取决于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)。