2011-11-04 1 views
31

Sto eseguendo il porting di una vecchia app per utilizzare backbone.js (si spera) Problema è nessuno dei vari oggetti nel sistema usa 'id' per id - ogni oggetto è diverso . Leggendo intorno, ho trovato la soluzione qui sotto quando si inizializza il Backbone.Model.Backbone - utilizzando un nome di campo diverso per ID

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

Sono preoccupato comunque che mentre mi sviluppo con la spina dorsale questo approccio mi morderà. Qualcuno ha qualche esperienza con questo. Qualsiasi suggerimento molto apprezzato.

modifica: Ho appena chiamato isNew() sul modello ed è diventato vero, anche se l'ID ora è impostato su 1. //////////////////// ///////////////////////

L'utilizzo di quanto segue sembra risolvere il problema.

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

})

risposta

50

Quando si utilizza idAttribute, spina dorsale mantiene sostanzialmente la proprietà id in sincronia con la proprietà user_ID. Il modo in cui è normalmente utilizzato è quando si definisce la classe

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 

Good Luck

+0

apprezzare questo - grazie. – Chin

+2

Appena mi sono imbattuto in questo quando mi sono posto la domanda Se dovrei usare suffissi id come "id_user" invece di "id" nel mio schema di database relazionale per un progetto backbone. Mi sono convinto che è meglio usarli secondo [questo] (http://stackoverflow.com/a/1369773/2236166), poi ho pensato "Doh, ma i campi ID per i modelli backbone ...", fino a quando leggi questo Q & A. Grazie! –

+1

Un po 'ovvio ma non utilizzare .get (' id ') a meno che non si desideri il valore id originale (se ne hai uno). Usa sempre "model.id". – backdesk