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/
attrs
コメントで@mikebridgeが指摘しているように、この動作はオプションを渡すことで取得できるようになりました。したがって、どちらかを使用します
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/
@pkyeckの回答で説明されているように、PATCHリクエストをサポートするバックボーンバージョン(> = 0.9.9)を使用していて、サーバーがその動詞を理解している場合は、PATCHリクエストを送信することもできます。