J'essaie Backbone.js, et l'une des choses que j'essaye est d'appeler une API distante. Je dois donc pouvoir remplacer Backbone.sync, si j'ai bien compris la documentation .
Il n'y a pas d'exemple de comment faire cela dans la documentation elle-même, et il ne semble pas y avoir de groupe Google pour Backbone ... quelqu'un peut-il indiquer un exemple pour faire cela?
Jetez un coup d'œil à cet exemple de source annotée où ils écrasent Backbone.sync
Avec une alternative à localstorage
En gros, Backbone.sync devrait être une fonction qui prend 4 arguments:
Backbone.sync = function(method, model, options) { };
Vous devez déclencher soit options.success
Ou options.error
Selon que la method
a réussi ou non. Les méthodes sont au format:
"create"
: Attendez que vous créiez le modèle sur le serveur"read"
: Attendez-vous à lire ce modèle sur le serveur et à le renvoyer"update"
: Attendez-vous à mettre à jour le modèle sur le serveur avec l'argument"delete"
: Attendez-vous à supprimer le modèle du serveur.Vous devez implémenter ces 4 méthodes et définir ce que vous voulez pour votre "server"
Bien sûr, ce ne sont que les choses que Backbone.sync
must. Vous pouvez implémenter plus de methods
et renvoyer plus de paramètres à success
, mais il est préférable de ne pas le faire.
Il est préférable de s’assurer qu’il fait la même chose que Backbone.sync
À l’heure actuelle pour que vous programmiez une interface plutôt qu’une implémentation. Si vous voulez remplacer votre Backbone.sync
Modifié par celui du localStorage, vous n'aurez pas besoin de l'étendre vous-même pour correspondre à votre Backbone.sync étendu "
[Modifier]
Notez également que vous pouvez utiliser plusieurs implémentations de sync
. Chaque référence à Backbone.sync
Est effectivement (this.sync || Backbone.sync)
, Vous devez donc faire quelque chose comme:
var MyModel = Backbone.Model.extend({
...
"sync": myOwnSpecificSync,
...
});
Backbone.sync
N'est que le modèle global par défaut utilisé par tous les modèles, à moins qu'une méthode sync
ne soit spécifiquement définie pour ces modèles.
Je sais que cette réponse est un peu trop tardive, et la réponse de @Raynos est excellente, mais je l'ai fait un peu différemment. Cela serait peut-être utile pour vous ou pour toute autre personne essayant d'utiliser une API avec Backbone.
Au lieu de remplacer Backbone.sync, j'ai remplacé Backbone.ajax , car c'est là que la demande ajax est faite.
Voici un exemple:
// Set the default implementation of `Backbone.ajax` to proxy through to `$`.
Backbone.ajax = function() {
var args = Array.prototype.slice.call(arguments, 0);
// Here, I add the OAuth token (or any other token)
// But before, I check that data exists, if not I add it
if (args[0]['data'] === undefined) {
args[0]['data'] = {};
}
args[0]['data']['token'] = 'any_api_token_here';
return Backbone.$.ajax.apply(Backbone.$, args);
};
J'ai généralement besoin de remplacer la méthode sync
du backbone lorsque je n'ai besoin que de synchroniser certains attributs. Une implémentation typique ressemble à ceci:
sync: function (method, model, options) {
options.data = _.pick(this.attributes, 'foo', 'bar', 'baz');
return Backbone.sync.call(this, method, model, options);
}