145 votes

Comment substituer Backbone.sync ?

J’essaie Backbone.js, et une des choses que je suis en train est de faire un appel à une API distante, donc j’ai besoin de pouvoir substituer Backbone.sync, si je comprends bien la documentation.

Il n’est pas un exemple de comment le faire dans la documentation elle-même et il ne semble pas être un groupe google pour colonne vertébrale... quelqu'un peut-il indiquer un exemple pour cela ?

225voto

Raynos Points 82706

Jetez un oeil à cette source annoté exemple, où ils remplacent Backbone.sync avec un localstorage alternative

colonne vertébrale-localStorage

Essentiellement De La Colonne Vertébrale.la synchronisation doit être une fonction qui prend 4 arguments:

Backbone.sync = function(method, model, options) { };

Vous avez besoin de feu options.success ou options.error selon que l' method réussi. Les méthodes sont de la forme:

  • "create" : attend à ce que vous créez le modèle sur le serveur
  • "read" : attend de vous que vous lisez ce modèle à partir du serveur et de le retourner
  • "update" : attend de vous que vous mettez à jour le modèle sur le serveur avec l'argument
  • "delete" : attend à ce que vous supprimez le modèle à partir du serveur.

Vous avez besoin pour mettre en œuvre ces 4 méthodes et définir ce que vous voulez pour votre "server"

Bien sûr, ce sont seulement les choses qui Backbone.sync doit mettre en œuvre. Vous pouvez mettre en œuvre plus d' methods et vous pouvez passer plus de paramètres de retour à l' 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 n'est actuellement de sorte que votre programmation d'une interface plutôt une mise en œuvre. Si vous souhaitez vous passer de votre modifiés Backbone.sync pour dire que le localStorage celui que vous n'aurez pas à prolonger vous-même pour correspondre à votre colonne vertébrale.sync"

[Modifier]

Aussi notez que vous pouvez utiliser de multiples implémentations de sync. Toutes les références à Backbone.sync est actaully (this.sync || Backbone.sync) , donc vous avez juste à faire quelque chose comme:

var MyModel = Backbone.Model.extend({ 
    ...

    "sync": myOwnSpecificSync,

    ...
});

Backbone.sync est juste la valeur par défaut global que tous les modèles sauf les modèles ont un sync méthode spécifiquement définie.

15voto

Cyril N. Points 7683

Je sais que cette réponse est un peu trop tard, et la réponse de @Raynos est bonne, mais je l'ai fait un peu différemment, et peut-être que ce serait utile pour vous ou pour toute autre personne essayant d'utiliser une API avec Backbone.

Au lieu de redéfinir Backbone.sync, j'ai redéfini Backbone.ajax , car c'est là que la requête 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);
};
 

11voto

Jesse Atkinson Points 1015

Je dois généralement remplacer la méthode sync du backbone lorsque j'ai besoin de synchroniser uniquement certains attributs. Une implémentation typique ressemble à ceci:

 sync: function (method, model, options) {
  options.data = _.pick(this.attributes, 'foo', 'bar', 'baz');
  Backbone.sync.call(method, model, options);
}
 

1voto

Jairo Santos Points 59

Juste pour mémoire : le livre en ligne, Développement d’Applications Backbone.js est un bon exemple sur comment substituer la méthode Backbone.sync.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X