Backbone使用id属性生成PUT请求

时间:2014-02-10 10:10:38

标签: rest backbone.js put

当我尝试保存现有对象时,如下所示:

this.model.set('name', $('#district-name').val());
this.model.save();

Backbone通过数据

向/ api / zone / 18发出PUT请求
id: 18
name: "qq3324"

但是id已经在url中了,我不想在请求正文中发送它。

1 个答案:

答案 0 :(得分:1)

使用save选项

调用patch

致电model.save({ patch: true })发出PATCH请求,仅包含已更改的请求 properties - 这仅影响当前要保存的调用,因此您必须记住为每个调用传递参数。此外,此工程会产生PATCH请求,而不是PUT请求。

编写自己的Backbone.sync

实现 Backbone使用

Backbone.sync与RESTful API进行通信。在发出Backbone.sync请求时,覆盖PUT方法以排除ID - 此解决方案可在全局范围内运行。有关此方法的实现,请参阅Backbone注释源:http://backbonejs.org/docs/backbone.html#section-130

覆盖模型的toJSON方法

Backbone.sync调用模型的model.toJSON方法,该方法传递一个options对象(与model.save函数相同的选项对象)。您可以覆盖此函数以获取一个参数,该参数指示应排除该ID。如果您始终扩展BaseModel而不是Backbone.Model,则可以全局工作。

    var BaseModel = Backbone.Model.extend({
        toJSON: function (options) {
            var data = _.clone(this.attributes);

            if (options.excludeId) {
                data = _.omit(data, 'id');
            }

            return data;
        }
    });

    var SomeModel = BaseModel.extend({});
    new SomeModel({ ... }).save({ excludeId: true });

或者...

或者,只需忽略服务器端的ID。