在Backbone.js的PATCH请求方法(PATCH request method in Bac

2019-07-29 11:05发布

什么是执行正确的方式PATCH同时节省了模型的属性在Backbone.js的要求吗?

Answer 1:

作为Backbone.js的v0.9.9,你可以简单地传递{ patch: true }save()

了解更多: http://backbonejs.org/#changelog



Answer 2:

除了詹姆斯Cropchos答案我想补充以下,因为这偷了一些时间从我也许可以帮助别人:

如果你使用model.save(attributesToPatchObject,{patch: true})喜欢它是可能的,因为骨干v.0.9.9在詹姆斯Cropchos回答说,你可能不知道如何确定哪些属性以来的最后一次通话发生了变化model.save()向他们传递为attributesToPatchObject这是从第一个参数model.save()model.fetch()如果你没有保存模型最近)。

骨干本身没有跟踪这些属性的。 我认为方法model.changedAttributes()可能适合,但作为骨干,医生说这个方法返回

只有模型的属性的哈希值,因为最后一组已更改,或假,如果有没有

所以这种方法并不适合这种需要。 经过一番研究,我发现骨干本身没有跟踪未保存的属性(我知道,不是一个优秀的调查结果,如果我更仔细地阅读文档)。

我发现backbone.trackit是骨干插件,完全需要功能添加到骨干,通过添加方法unsavedAttributes()的模型。 backbone.trackit的文档说,这个方法:

对称骨干model.changedAttributes(),但它返回模型的属性的哈希已更改自上次保存或假,如果有没有。 像changedAttributes,外部的属性的散列可以传递在,返回在该散列从模型不同的属性。

它的工作原理是这样的:

//fetch an existing model from server
model.fetch({
  success : function(model, respose, options) {
    //tell backbone.trackit to track unsaved Attributes
    model.startTracking();
  }
});

//now some changes to the model happen
model.set("someProperty", "someValue");

/* save the model to server using the PATCH-Method 
   and only send the unsaved Attributes; 
   in this case only "someProperty" is sent
*/
model.save(model.unsavedAttributes(), {patch: true});

由于unsavedAttributes()如果没有未保存的属性返回false,你可以额外包装您的save()用来检查是否一个if条件中陈述unsavedAttributes()它在需要返回一些其他然后假的 ,只能做你的PATCH请求(因为事情发生了转变)。

注意:您没有调用fetch()使用startTracking()所以你可以使用此方法,即使新创建的模型( model.isNew()返回在这种模式真),如果对于一个用例。

希望这可以救一个人的研究一点点时间。



Answer 3:

你必须重写Backbone.sync并扩展现有的方法映射器

var methodMap = {
    'create': 'POST',
    'update': 'PUT',
    'delete': 'DELETE',
    'read':   'GET',
    'patch':  'PATCH'
};

你必须在模型上创建自己的打补丁方法一样

Backbone.Model.prototype.patch = function(options) 
{
    // some code here that checks what attributes have changed since last save
    var xhr = (this.sync || Backbone.sync).call(this, 'patch', this, options);
    return xhr;  
}

我敢肯定,你可以进一步扩展骨干,包括OPTIONSHEAD如果你需要

不过请注意,甚至通过jQuery的支持PATCH,OPTIONS和HEAD方法,您的最终用户的浏览器可能不。



文章来源: PATCH request method in Backbone.js