Backbone.js - Conociendo el identificador cid

Hola nuevas criaturas,

Hoy les presentaré otro atributo más en Backbone. Se trata del cid.

Instancias de modelos.

Resulta que Backbone, debe identificar los registros que creamos de alguna forma. Cuando nosotros creamos un registro aun sin guardarlo a la base de datos, éstos registros están siendo manipulables con Backbone desde sus instancias. Para ello usa un identificador único.

Supongamos que tenemos lo siguiente:

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

El candidato aún no ha sido guardado, no tiene un id, no le hemos pasado ni uno dentro de los demás parámetros y tampoco viene de base de datos con un id ya autogenerado.

Al momento de crearlo, si lo hacemos en la consola de nuestro navegador favorito, veremos lo siguiente:

> var candidato = new Candidato({ nombre: 'EPN', partido: 'PRI' });
> undefined
> candidato // {cid: "c3", attributes: Object, _changing: false, _previousAttributes: Object, changed: Object…}

Por lo que vemos hay un cid con valor c3, éste es el cid que crea Backbone en sus instancias. y podemos acceder a él mediante candidato.cid.

candidato.cid
// Devuelve el valor c3

Los valores del atributo cid no se repetirán mientras la instancia viva. Esto se debe a que Backbone usa una función de su librería altamente requerida, la función unique de underscore.

La función uniqueId de Underscore.

Viajemos un rato a las entrañas de Backbone. En éste momento la inspeccionaremos en su versión 1.2.1 a la linea 377. En caso de que no esté en la misma línea, les pongo la declaración del modelo para que no se pierdan.

var Model = Backbone.Model = function(attributes, options) {
...
    this.cid = _.uniqueId(this.cidPrefix);
...
};

Como vemos, usa una función que se llama _.uniqueId. Esa función es sólo de underscore y devuelve un valor único que incrementa cada vez que es invocada. Si pruebas esa librería en la consola verás que incrementa y no para de incrementar.

_.uniqueId();
// "4"
_.uniqueId();
// "5"
_.uniqueId();
// "6"
_.uniqueId();
// "7"
_.uniqueId();
// "8"

La función _.uniqueId acepta un parámetro y lo usa como prefijo. Si le ponemos a la función un string cualquiera, será más identificable.

_.uniqueId('c');
// "c9"
_.uniqueId('c');
// "c10"
_.uniqueId('c');
// "c11"
_.uniqueId('c');
// "c12"
_.uniqueId('c');
// "c13"

Realmente esto es lo que hace Backbone. Le agrega un prefijo. Podemos verlo en la línea 405 con la variable cidPrefix dentro del objecto.

    idAttribute: 'id',

    cidPrefix: 'c',

    initialize: function(){},

Esto lo usa para otras instancias, como los eventos y las vistas. Les muestro rapidisimo.

_.uniqueId('l') // para eventos -> Imprime l19
_.uniqueId('view') // para las vistas -> Imprime view20

Y todo esto para que nos sirve?

Ese método nos puede servir también para manipular los datos en el DOM sin crear ningún identificador y sin concatenar datos.

Espero que les haya gustado esta publicación.
Nos leemos a la próxima...

Bendiciones.