Backbone.js - Cambiando nuestro idAtributte

Hola Nuevas Criaturas,

En el post pasado hablábamos de Nuevos registros en Backbone. La clave es el id. Ahora vamos a ver como cambiar ese nombre de atributo.

Un poco de SQL

A veces tenemos campos únicos que nos sirve de llave primaria y que en su mayoría (pero no casi siempre) se les llama id. Pero que pasa cuando nuestro id tiene otro nombre en nuestra base de datos? Lo que podríamos hacer en el backend sería cambiar ese nombre de atributo. Supongamos que la consulta sql es la siguiente:

SELECT cve_candidato, nombre, votos FROM Candidato

Como nuestro id se llama cve_candidato entonces habría problemas puesto que Backbone busca campos con nombre id para saber si los registros estan salvados.

Entonces para que tengamos el campo id en nuestra petición AJAX tendriamos que cambiar nuestra consulta por la siguiente:

SELECT cve_candidato as id, nombre, votos FROM Candidato

Con esto ya corregimos nuestra estructura para poder trabajar con Backbone.

Cambiando el idAttribute

Pero esto no se trata de un curso SQL, mas bien les muestro de manera simple que esto en Backbone es de la misma forma con una sola línea. Se trata de idAttribute.

// Solo con ponerle de esta forma
idAttribute: 'cve_candidato'

Es decir, poniendo los ejemplos anteriores, sería lo siguiente.

// Modelo Candidato
var Candidato = Backbone.Model.extend({  
    idAttribute: 'cve_candidato'
});

// Nueva instancia de Candidato
var candidato = new Candidato({ cve_candidato: 1, nombre: 'EPN', partido: 'PRI' }); 

// Manera de saber el id en la instancia es simple
console.log(candidato.get('cve_candidato'));
console.log(candidato.id);

Cuando cambiemos el nombre de atributo id por el deseado, nos fijaremos que la variable id de las instancias de Backbone siguen igual. Me refiero a que se confundiría el nombre y algunos le llamarían candidato.cve_candidato pero seria un error, porque internamente Backbone guarda el nombre pero no cambia la referencia que se usa en la instancia. El ejemplo anterior indica que nos referenciamos como candidato.id e internamente cuando Backbone lee los registros busca el nombre de campo cve_candidato que le pasamos a la hora de declarar nuestro Modelo.

En la proxima veremos el identificador cid interno de Backbone.

Bendiciones.