2012-06-20 12 views
6

Vedo che ci sono tecniche disponibili per avere modelli profondi in Backbone, ma che dire delle raccolte gerarchiche di un singolo modello?Come possiamo rappresentare le gerarchie di modelli profondi in Backbone.js

Un esempio ovvio è un albero di categorie. Quindi, possiamo avere un modello di categoria che ha alcune proprietà, 'nome', 'tipo', 'colore', qualunque sia.

Piuttosto che avere ID padre stile db relazionale, stiamo usando js, ​​quindi vogliamo che i dati vengano rappresentati come json.

È possibile utilizzare il backbone per supportare strutture di dati (presumibilmente aumentando le raccolte) contenenti istanze di un singolo modello in un albero (in modo che i modelli ei sub-modelli siano tutte istanze dello stesso modello)?

risposta

8

Dai un'occhiata a Backbone-Relational o supermodel.js.

Questi progetti forniscono forme migliori di nidificazione del modello rispetto all'implementazione predefinita.

Abbiamo solo modelli Backbone nido come:

var MyModel = Backbone.Model.extend({}); 
var MySubModel = Backbone.Model.extend({}); 

var model = new MyModel({submodel: new MySubModel({color: 'blue'})}); 

e abbiamo la priorità sulle toJSON metodi:

// nested models! Might just override the internal representation of this... 
_.extend(Backbone.Model.prototype, { 
    // Version of toJSON that traverses nested models 
    toJSON: function() { 
    var obj = _.clone(this.attributes); 
    _.each(_.keys(obj), function(key) { 
     if(!_.isUndefined(obj[key]) && !_.isNull(obj[key]) && _.isFunction(obj[key].toJSON)) { 
     obj[key] = obj[key].toJSON(); 
     } 
    }); 
    return obj; 
    } 
}); 

_.extend(Backbone.Collection.prototype, { 
    // Version of toJSON that traverses nested models 
    toJSON: function() { 
    return this.map(function(model){ return model.toJSON(); }); 
    } 
}); 

Così le rappresentazioni JSON sembrano corretti quando abbiamo modelli nido. Dovrai prestare attenzione al metodo parse sul tuo modello - quando torni il tuo JSON dal server dovrai generare tutti i sottomodelli e le raccolte in modo che tutto funzioni correttamente.

+0

E sì, il primo metodo 'toJSON' potrebbe essere scritto meglio per fare' if (chiave instanceof Backbone.Model) 'o qualcosa del genere ... – tkone

+2

Grazie .. e se stiamo recuperando l'intero albero come json dal server in una richiesta .. come facciamo a istanziare tutto in una volta? – hacklikecrack

Problemi correlati