2011-11-04 21 views
31

Estoy portando una aplicación antigua para usar backbone.js (con suerte) El problema es que ninguno de los diversos objetos del sistema usa 'id' para id - cada objeto es diferente . Leyendo, he encontrado la solución a continuación al inicializar el Backbone.Model.Backbone: usar un nombre de campo diferente para id

initialize: function(){ 
    this.idAttribute = 'user_ID'; 
    this.set({'id':this.get('user_ID')}); 
} 

Estoy preocupado, sin embargo, que a medida que me desarrolle con la columna vertebral este enfoque me va a picar. ¿Alguien tiene alguna experiencia con esto? Cualquier apuntador muy apreciado.

editar: Acabo de llamar a isNew() en el modelo y me hice cierto, aunque ahora el ID está establecido en 1. //////////////////// ///////////////////////

El uso de lo siguiente parece solucionarlo.

User = Backbone.Model.extend({ 
idAttribute : 'user_ID' 

})

Respuesta

50

Cuando se utiliza idAttribute, espina dorsal, básicamente, mantiene la propiedad id en sincronía con la propiedad user_ID. La forma en que se utiliza normalmente es cuando se define la clase

var UserModel = Backbone.Model.extend({ 
    idAttribute: 'user_ID', 
    initialize: function() { 
     //do stuff 
    } 
}); 

var me = new UserModel({user_ID: 1234, name: 'Tim'}); 
console.log(me.id); //1234 
console.log(me.get('user_ID')); //1234 
console.log(me.isNew()); //false 

var me2 = new UserModel({name: 'newUser'}); 
console.log(me2.isNew()); //true 

buena suerte

+0

apreciar este - gracias. – Chin

+2

Acabo de tropezar con esto cuando me pregunté si debería usar id-sufijos como "id_user" en lugar de "id" en mi esquema de base de datos relacional para un proyecto de red troncal. Me convencí de que era mejor usarlos de acuerdo con [esto] (http://stackoverflow.com/a/1369773/2236166), y luego pensé "Doh, pero los campos de ID para los modelos de la red troncal ...", hasta que lea este Q & A. ¡Gracias! –

+1

Un poco obvio, pero no use .get ('id') a menos que desee el valor de identificación original (si tiene uno). Siempre use 'model.id'. – backdesk

Cuestiones relacionadas