J'essaie Backbone.js, et l'une des choses que j'essaye est de faire un appel à une API distante, donc je dois être en mesure de remplacer Backbone.sync, si je comprends bien 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 donner un exemple pour faire cela?
javascript
backbone.js
Picardo
la source
la source
Réponses:
Jetez un œil à cet exemple de source annoté où ils
Backbone.sync
écrasent avec une alternative de stockage localbackbone-localStorage
Fondamentalement, Backbone.sync doit être une fonction qui prend 4 arguments:
Vous devez tirer l'un
options.success
ou l' autre ouoptions.error
selon que le amethod
réussi. Les méthodes sont au format:"create"
: prévu que vous créez le modèle sur le serveur"read"
: vous attendiez à lire ce modèle sur le serveur et à le renvoyer"update"
: s'attend à ce que vous mettiez à jour le modèle sur le serveur avec l'argument"delete"
: s'attend à ce que vous supprimiez 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 qui
Backbone.sync
doivent être mises en œuvre. Vous pouvez en implémenter plusmethods
et vous pouvez renvoyer plus de paramètres,success
mais il vaut mieux ne pas le faire.Il est préférable de vous assurer qu'il fait la même chose que le
Backbone.sync
fait actuellement afin que votre programmation soit vers une interface plutôt qu'une implémentation. Si vous souhaitez remplacer votre modification par,Backbone.sync
par exemple, localStorage, vous n'aurez pas à l'étendre vous-même pour qu'elle corresponde à votre Backbone.sync étendu "[Éditer]
Notez également que vous pouvez utiliser plusieurs implémentations de
sync
. Chaque référence àBackbone.sync
est réellement(this.sync || Backbone.sync)
donc il vous suffit de faire quelque chose comme:Backbone.sync
est simplement lasync
méthode globale par défaut que tous les modèles utilisent à moins que les modèles n'aient une méthode spécifiquement définie.la source
(this.sync || Backbone.sync)
Voir modifier. Une autre astuce consiste à lire la source annotée du squelette. Tout y est!sync
de n'importe où dans votre code (généralement une surchargesync
), faites simplement unBackbone.sync.call(this, method, this, options)
.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, et 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 requête ajax est effectuée.
Voici un exemple:
la source
J'ai généralement besoin de remplacer la
sync
méthode de backbone lorsque je n'ai besoin de synchroniser que certains attributs. Une implémentation typique ressemble à ceci:la source
Backbone.sync.apply(this, arguments);
? C'est un peu plus flexible si vous décidez, par exemple, d'omettre l'argument "options" dans la version remplacée desync
.Backbone.model.save(attributes, {patch: true})
pour faire des mises à jour partielles maintenant