Backbone.sync uses the jQuery.ajax function, so we can change jqXHR or the data sent to the server (via sendSend).
var oldSync = Backbone.Model.prototype.sync; var SomeModel = Backbone.Model.extend({ url: 'test.json', defaults: { id: 1, foo: 'test' }, sync: function (method, model, options) { // options are passed to the jQuery.ajax _.extend(options, { emulateHTTP: true, emulateJSON: false, beforeSend: function(xhr, settings) { // settings.data is a body of our request. if (_.isString(settings.data)) { // settings.data is a JSON-string like '{"id":1, "foo":"test"}' settings.data = Backbone.$.parseJSON(settings.data); } settings.data = Backbone.$.param(settings.data); // settings.data is 'id=1&foo=test' } }); oldSync.apply(this, arguments); } }); var model = new SomeModel(); model.save();
In fact, we can create mixin! :)
source share