Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rest 主干使用id属性发出PUT请求_Rest_Backbone.js_Put - Fatal编程技术网

Rest 主干使用id属性发出PUT请求

Rest 主干使用id属性发出PUT请求,rest,backbone.js,put,Rest,Backbone.js,Put,当我尝试保存现有对象时,如下所示: this.model.set('name', $('#district-name').val()); this.model.save(); 主干向/api/districts/18发出PUT请求,并提供数据 id: 18 name: "qq3324" 但是id已经在url中,我不想在请求正文中发送它。使用补丁选项调用保存 调用model.save({patch:true})发出patch请求,仅包括已更改的 属性-这只影响要保存的当前调用,因此必须记住为每

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

this.model.set('name', $('#district-name').val());
this.model.save();
主干向/api/districts/18发出PUT请求,并提供数据

id: 18
name: "qq3324"
但是id已经在url中,我不想在请求正文中发送它。

使用
补丁
选项调用
保存

调用
model.save({patch:true})
发出
patch
请求,仅包括已更改的 属性-这只影响要保存的当前调用,因此必须记住为每个调用传递参数。此外,此磨机会导致
补丁
请求,而不是
放置
请求

编写自己的
Backbone.sync的实现
主干网。主干网使用sync
与RESTful API通信。覆盖
Backbone.sync
方法以在发出
PUT
请求时排除ID-此解决方案在全局范围内有效。有关此方法的实现,请参见主干注释源:

覆盖模型的
toJSON
方法
Backbone.sync
调用模型的
model.toJSON
方法,该方法被传递一个options对象(与您给
model.save
函数的options对象相同)。您可以覆盖此函数以获取指示应排除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。

为什么会出现这个问题?您不能在服务器端忽略它吗?在服务器端工作验证程序上,它不是传递额外的参数。这与我无关。
在执行
此.model.save()
之前删除此.model.id
,这将导致主干向
'/api/districts'
发送post请求。这只是一个可行的建议-根据您的需要,第二个或第三个选项可能比第一个更适合您。正如您所说,您对后端没有影响,要问的问题是“我的后端可以处理补丁请求吗?”