Cómo anular Backbone.sync?
Estoy probando Backbone.js, y una de las cosas que estoy tratando es hacer una llamada a una API remota, así que necesito ser capaz de anular Backbone.sync, según entiendo la documentación.
No hay un ejemplo de cómo hacer eso en la documentación en sí, y no parece haber un grupo de Google para Backbone... ¿puede alguien señalar un ejemplo para hacer esto?
3 answers
Echa un vistazo a este ejemplo de fuente anotada donde sobrescriben Backbone.sync
con una alternativa de localstorage
Básicamente Columna vertebral.sync debe ser una función que toma 4 argumentos:
Backbone.sync = function(method, model, options) { };
Necesitas disparar options.success
o options.error
dependiendo de si el method
tuvo éxito. Los métodos están en el formato:
-
"create"
: se espera que cree el modelo en el servidor -
"read"
: espera que leas este modelo desde el servidor y devolverlo -
"update"
: se espera que actualice el modelo en el servidor con el argumento -
"delete"
: se espera que elimine el modelo del servidor.
Necesitas 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 a success
pero es mejor no hacerlo este.
Es mejor 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 por, por ejemplo, el localStorage, no tendrá que extenderlo usted mismo para que coincida con su columna vertebral extendida.sync "
[Editar]
También tenga en cuenta que puede usar múltiples implementaciones de sync
. Cada referencia a Backbone.sync
es actaully (this.sync || Backbone.sync)
así que solo tienes que hacer algo como:
var MyModel = Backbone.Model.extend({
...
"sync": myOwnSpecificSync,
...
});
Backbone.sync
es solo el global predeterminado que todos los modelos usan a menos que los modelos tengan un método sync
específicamente establecido.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-10-20 22:29:58
Sé que esta respuesta es un poco tarde, y la respuesta de @Raynos es genial, pero lo hice un poco diferente, y tal vez sería útil para usted o para cualquier otra persona que intente usar una API con Backbone.
En lugar de anular Backbone.sync, anulé Backbone.ajax, porque es donde se realiza la petición 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);
};
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-07-12 07:10:44
Normalmente necesito anular el método sync
de backbone 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);
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-10-05 18:33:13