2011-10-13 23 views
8

¿Cómo se puede reemplazar Backbone.sync para no hacer nada? Mi aplicación tiene un botón "Enviar" que hará AJAX POST para mí, así que no quiero usar el comportamiento predeterminado de auto-magic que ofrece Backbone.sync.Cómo reemplazar Backbone.sync con nada, ni siquiera localStorage?

Asimismo, no quiero usar adaptador de red troncal LocalStorage como yo estoy tratando de hacer este sitio compatible con IE6 y 7.

Dicho esto, yo más o menos sólo quieren Backbone hacer nada más que mantener los registros en la memoria JS (similar a Spine.js). ¿Esto es posible?

+0

simple, No utilice la columna vertebral y cambiar a un simple Cross-Browser Ajax Handler. –

Respuesta

19

La forma más fácil y probablemente la mejor manera de hacerlo es no reemplazar Backbone.Sync, sino simplemente ignorarlo. Estos son los métodos que no desea ser contactado:

Colecciones:

  • fetch
  • crear

Modelos:

  • ir a buscar
  • Guardar
  • destroy

Si evita llamar a cualquiera de estos métodos, efectivamente ignorará Backbone.Sync y podrá escribir su propio código para hacer sus llamadas AJAX.

Escribí una gran cantidad de código Backbone sin tener una llamada al servidor involucrada, cuando comencé. No hay reglas para decir que debe usar todas las capacidades de Backbone. De hecho, diría que es todo lo contrario. Backbone está escrito de una manera tan modular, con cada área de funcionalidad y especialización tan bien, que solo debe usar lo que realmente necesita.

Cree sus modelos en la memoria, llame al set y get para almacenar los datos. Rellenarlos en colecciones con add y remove según sea necesario. Pase sus modelos y colecciones a sus vistas y renderícelas al HTML DOM. Simplemente evite llamar a los métodos que he enumerado anteriormente y no tendrá que preocuparse por Backbone. Sincronización.

+0

gracias. esto tiene perfecto sentido. en una nota al margen si no usa Model.destroy() ¿cómo "destruye" algo correctamente? Usa collection.remove y enlaza al evento remove? – kidcapital

+0

sí, eso lo haría. Des-referenciar el modelo en todas partes que tenga una referencia y será basura recolectada. –

1

Una vez hice this gist como parte de un tutorial en Backbone.js. Falsifica Backbone.sync escribiendo solo en un registro, pero para darle una apariencia de realismo también copia el atributo .cid de un modelo a su atributo .id para hacer que los modelos parezcan estar sincronizados. ¡Tenga cuidado con las consecuencias indeseadas de usar esa técnica en producción! Pero todos consentimos adultos aquí, ¿verdad?

Aquí está la misma idea sin la tala:

Backbone.sync = function(method, model, succeeded) { 
    if(typeof model.cid != 'undefined') { 
     // It's a freshly made model 
     var cid = model.cid; 
     // ..fake that it's .cid turns into a "real" .id: 
     model.unset('cid').set({id:cid}, {silent:true}); 
    } 
    // Oh yes, it all went sooo well ;-) 
    succeeded(model); 
}; 
+2

Creo que la API ha cambiado desde que escribió esto, porque el tercer argumento no es una devolución de llamada. Acabo de 'devolver falso' y parece funcionar bien.Pero mencionas "varias consecuencias no deseadas": ¿cuáles serían, si todos mis datos están en el lado del cliente, sin necesidad de persistencia? –

Cuestiones relacionadas