javascript backbone.js

javascript - ¿Cómo anular Backbone.sync?



backbone.js (3)

Estoy probando Backbone.js, y una de las cosas que estoy intentando es hacer una llamada a una API remota, así que tengo que ser capaz de anular Backbone.sync, ya que entiendo la documentación .

No hay un ejemplo de cómo hacerlo en la documentación en sí, y no parece haber un grupo de Google para Backbone ... ¿alguien puede señalar un ejemplo para hacer esto?


Normalmente necesito anular el método de sync la red troncal cuando solo necesito sincronizar ciertos atributos. Una implementación típica se ve así:

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


Sé que esta respuesta es un poco tarde, y la respuesta de @Raynos es genial, pero lo hice de manera diferente, y tal vez sería útil para ti o para cualquier otra persona que intente utilizar una API con Backbone.

En lugar de anular Backbone.sync, anulé Backbone.ajax , porque es donde se realiza la solicitud de Ajax.

Aquí hay un ejemplo:

// 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); };


Eche un vistazo a este ejemplo de fuente anotada donde sobrescriben Backbone.sync con una alternativa localstorage

backbone-localStorage

Básicamente, Backbone.sync debería ser una función que toma 4 argumentos:

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

options.success options.error options.success u options.error dependiendo de si el method tuvo éxito. Los métodos están en el formato:

  • "create" : se esperaba que creara el modelo en el servidor
  • "read" : esperaba que leyera este modelo desde el servidor y lo devuelva
  • "update" : se espera que actualice el modelo en el servidor con el argumento
  • "delete" : se espera que elimine el modelo del servidor.

Debes implementar esos 4 métodos y definir lo que quieras para tu "server"

Por supuesto, estas son solo las cosas que Backbone.sync debe implementar. Puede implementar más methods y puede pasar más parámetros al success pero es mejor no hacer esto.

Lo mejor es asegurarse de que hace lo mismo que Backbone.sync hace actualmente para que su programación a una interfaz en lugar de una implementación. Si desea cambiar su Backbone.sync modificado para decir el localStorage uno no tendrá que extenderlo usted mismo para que coincida con su Backbone.sync extendido "

[Editar]

También tenga en cuenta que puede usar múltiples implementaciones de sync . Todas las referencias a Backbone.sync son realmente (this.sync || Backbone.sync) por lo que solo tienes que hacer algo como:

var MyModel = Backbone.Model.extend({ ... "sync": myOwnSpecificSync, ... });

Backbone.sync es solo el global predeterminado que usan todos los modelos a menos que los modelos tengan un método de sync establecido específicamente.