如Model.save 文档中所述:
save model.save([attributes], [options])
[...] 属性哈希(如集合中的)应该包含您想要更改的属性——未提及的键不会被更改——但是,资源的完整表示将被发送到服务器。
但是,您可以覆盖 save 方法并data
通过将发送到服务器而不是完整模型表示的选项提供属性。例如,这只会保存传递给方法的属性:
var M = Backbone.Model.extend({
save: function (attrs, options) {
options || (options = {});
options.contentType = 'application/json';
options.data = JSON.stringify(attrs);
Backbone.Model.prototype.save.call(this, attrs, options);
}
});
还有一个小提琴http://jsfiddle.net/dLFgD/
正如@mikebridge 在评论中指出的那样,现在可以通过传递一个attrs
选项来获得这种行为。所以要么使用
book.save(null, {
attrs: {author: "Teddy"}
});
或保持覆盖
var M = Backbone.Model.extend({
url: '/echo/json/',
save: function(attrs, options) {
options || (options = {});
options.attrs = attrs;
Backbone.Model.prototype.save.call(this, attrs, options);
}
});
http://jsfiddle.net/nikoshr/dLFgD/7/
如果您使用支持它的 Backbone 版本(> = 0.9.9)并且您的服务器理解该动词,您也可以发送 PATCH 请求,如@pkyeck 的回答中所述