Backbone.js - Modelos

Hola Nuevas Criaturas,

Les presento un seguimiento de éste maravilloso framework web.

Conociendo la clase Model

Supongamos que queremos crear una aplicación para elecciones electorales. Entonces declaramos un modelo. Lo llamaré Candidato.

var Candidato = Backbone.Model;

Creando una instancia

Si queremos crear una nueva instancia es de la siguiente manera.

var candidato = new Candidato;

Al declarar nuestro modelo podemos pasar métodos en forma de un objeto. En algún momento nos servirá que al crear la instancia de un nuevo Candidato, lanzemos un mensaje o se ejecute cierta acción. Ésto lo podemos hacer a como sigue.


var Candidato = Backbone.Model.extend({
	initialize: function(){
    	window.alert('Una nueva instancia de "Candidato" ha sido creada');
    }
});

var candidato = new Candidato;

Creando nuevos registros.

Ahora vamos a crear un nuevo candidato. A nuestro modelo Candidato tendremos que pasarle un objeto de clave-valor donde estarán nuestros campos y nuestros datos.
Si queremos agregar un candidato, su nombre, su partido político y su número de votos, entonces tendríamos que hacerlo así.

Nuestros registros:

// Estructura de nuestro nuevo registro.
{
	nombre: 'EPN',
	partido: 'PRI',
	votos: 0
}

Una vez definido nuestro registro lo agregamos con la instancia de nuestro modelo Candidato.

var candidato = new Candidato({nombre: 'EPN', partido: 'PRI', votos: 0 });

Y... ¿Cómo vemos los datos de ese modelo?
Tenemos dos formas, una con el método get y la otra con toJSON.

El metodo get nos servirá para traer el valor de un campo en específico. Si queremos traernos el nombre de un candidato entonces podríamos hacerlo de la siguiente manera.

window.alert( candidato.get('nombre') );
// Muestra -- EPN

Si queremos mostrar todos los datos entonces usamos toJSON().

candidato.toJSON();
// { nombre: 'EPN', partido: 'PRI', votos: 0 }

Campos por defecto.

Por último, si queremos registros que tengan valores por defecto, usamos defaults pero tenemos que extender el modelo. Así como lo hicimos con el método initialize, sólo que NO en forma de función, sino como objeto, conteniendo los valores que nosotros queremos que tenga por defecto.
Un ejemplo sería si queremos agregar candidatos, estaríamos agregando sus votos en 0, puesto que es un nuevo candidato. No se preocupen, yo les muestro.

var Candidato = Backbone.Model.extend({
	defaults:{
    	votos: 0
    }
});

Ahora nada más agregamos nuestro candidato pero solo con los datos que nos interesan, de la siguiente manera.

var candidato = new Candidato({nombre: 'EPN', partido: 'PRI'})

Recordemos que los votos ya estarán en cero. Al crear nuevos registros, no será necesario incluir el campo voto ni su valor.

Si escribimos un toJSON() para saber nuestros registros, nos mostrará todos los datos pero con votos en cero.

candidato.toJSON();
// { nombre: 'EPN', partido: 'PRI', votos: 0 }

En la próxima veremos las validaciones en los modelos.

Bendiciones!