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.