Me sacaste apurado Nico, estaba esperando hacer el login por lo menos, antes de presentar
backbone.io :P
Bueno si, como dijo Nicolas,
backbone.io trabaja sobre backbone y
socket.io.
En backbone, lo que es suplantado es Backbone.sync, encargado de la transferencia de información con el servidor. Este esta pensado originalmente para servidores REST. En cambio, con
backbone.io la transferencia es sobre websockets. Socket.io es manejado por atrás sin que si quiera nos demos cuenta, solo es necesario importar el .js en cliente, pero nunca trabajamos directamente con el.
Paso a presentar un poco el código:
// en el servidor, como de costumbre:
var backboneio = require('
backbone.io');
/* ahora, empezamos a crear 'backends'. En cada uno de ellos se va a almacenar una 'copia' de una colección que tengamos en el cliente. Se debe utilizar un backend por colección que vayamos a utilizar. */
var backendUsuarios = backboneio.createBackend();
backendUsuarios.use(backboneio.middleware.memoryStore());
/* es muy intuitivo, cabe señalar igual que en la segunda linea, decimos que el backend quede en memoria del servidor. Se pude, aunque no lo he probado, utilizar en su lugar una base de datos 'MongoDB'. */
var backendNotas = backboneio.createBackend();
backendNotas.use(backboneio.middleware.memoryStore());
/* para terminar en el servidor, le pasamos al listen de
backbone.io, donde escuchar, y que backends va a utilizar. Se pueden crear también chanells, y en cliente decidir dentro de cada backend a que canal va a estar escuchando, nos pude servir para tener diferentes grupos de usuarios con diferentes 'versiones' si se quiere (totalmente paralelas) de una colección. */
backboneio.listen(server, { usuarios: backendUsuarios, notas: backendNotas});
//pasamos al cliente... Hago el ejemplo de una sola colección.
//el modelo no tiene mucho misterio.
var Usuario = Backbone.Model.extend({
initialize: function(){
console.log('Usuario creado.');
}
});
//en la colección si es preciso indicar el backend que se esta escuchando. Además de en la función initialize, agregar manualmente un bind por evento, ya sea 'create', 'update', 'delete'. O, simplemente usar por defecto this.bindBackend(); lavándonos las manos.
var Usuarios = Backbone.Collection.extend({
model: Usuario,
backend: 'usuarios',
initialize: function() {
this.bindBackend();
}
});
//Creamos una instancia de la colección, la sincronizamos con el servidor, y luego creamos un usuario, haciendo que este sea creado en todos los clientes que estén escuchándonos.
var users = new Usuarios;
users.fetch();
var yo = users.create({ nombre: 'mathias', contrasenia: '******'});
// Eso fue básicamente el código 'nuevo' que tiene la rama
backbone.io. Mi intención era solo dejarles un ruido.
Se que hay otras alternativas a
backbone.io, quizá mas flexibles y/o mejor construidas. Yo quise usar esta porque me pareció sumamente sencilla.
Les dejo además unos links..
el sitio de
backbone.io, con una pequeña guía de seguro mas clara que la mía [aunque en ingles] :
https://github.com/scttnlsn/backbone.io
una pagina muy interesante con una linda base de datos de librerías para nodejs, que nos pueden llegar a facilitar mucho el trabajo. Como en este caso:
http://toolbox.no.de/
y para vos Nicolás especialmente, acá hay un muchacho que dice ser mejor que rails y backbone:
http://derbyjs.com/un interesante mvc sobre nodejs. Cuenta con una librería que esta disponible también de manera independiente. Se llama racer. Y dice ser algo asi como
backbone.io con la diferencia que no se basa en backbone, se basa en ella misma [y corre sobre
socket.io]. Pero tiene pinta de ser algo mucho mas maduro que la herramienta que les acabo de presentar [aun estando en alfa].
https://github.com/codeparty/racerBueno. Si algo les deje, fue mucho ruido.
Me voy satisfecho con eso.