Usando cabeçalhos personalizados com Backbone.sync

Usando uma técnica semelhante à discutida em Adicionar um URL raiz a todas as solicitações da API Backbone , é muito fácil adicionar um cabeçalho personalizado às Backbone.syncsolicitações sem ter que repeti-lo em cada fetch/ save.

Por exemplo, a API de um projeto em que eu estava trabalhando recentemente precisava de um Authorizationcabeçalho, contendo o token de acesso OAuth, enviado com cada solicitação de sincronização. Teria sido razoavelmente trivial reescrever um Backbone.syncsubstituto que tratasse disso, mas por que escrever código extra quando Backbone.syncfunciona tão bem?

/*
* Using AMD/RequireJS

*

* The `auth` module handles OAuth and stores the

* access token that needs to be sent in a header

*/

define
(['api/auth'], function (auth) {
'use strict';

/*
* Store a version of Backbone.sync to call from the

* modified version we create

*/

var backboneSync = Backbone.sync;

Backbone.sync = function (method, model, options) {
/*
* The jQuery `ajax` method includes a 'headers' option

* which lets you set any headers you like

*/

options
.headers = {
/*
* Set the 'Authorization' header and get the access

* token from the `auth` module

*/

'Authorization': 'Bearer ' + auth.getAccessToken()
};

/*
* Call the stored original Backbone.sync method with

* extra headers argument added

*/

backboneSync
(method, model, options);
};
});