Ho un Backbone.Model denominato Company
. Il mio modello Company
ha un Employees
Backbone.Collection contenente i modelli Employee
.Come posso passare le proprietà in un Backbone.Model che non desidero essere trattato come attributi?
Quando si istanziano i miei modelli Employee
per popolare la raccolta Employees
, desidero che abbiano un riferimento allo Company
a cui appartengono. Ma quando passo Company
in esso diventa uno degli attributi di Employee
. Questo è un problema quando vado a salvare il Employee
perché il metodo toJSON
conterrà un oggetto Company
, quando nel database tutto ciò che memorizzo è il numero intero estero company_id
.
Mi piacerebbe che esistesse un secondo parametro per Backbone.Model che accettava le proprietà del modello che non fanno parte degli attributi principali. Come posso aggirare questo? Mi rendo conto che potrei istanziare i miei modelli Employee
e successivamente collegare lo Company
, ma voglio davvero eseguire tutti i compiti in un "costruttore" tradizionale piuttosto che collegare le proprietà dall'esterno.
es .:
Employee = Backbone.Model.extend({});
Employees = Backbone.Collection.extend({
model: Employee
});
Company = Backbone.Model.extend({
initialize: function() {
this.employees = new Employees({});
}
});
c1 = new Company({id: 1});
e = new Employee({name: 'Joe', company_id: 1, company: c1});
c1.employees.add(e);
e.get('company'); // => c1
e.save(); // BAD -- attempts to save the 'company' attribute, when in reality I only want to save name and company_id
//I could do
c2 = new Company({id: 2});
e2 = new Employee({name: 'Jane', company_id: 2});
e2.company = c2;
c2.employees.add(e);
e.company; // => c2
//I don't like this second method because the company property is set externally and I'd have to know it was being set everywhere in the code since the Employee model does not have any way to guarantee it exists
Backbone.Model mostra accetta solo un singolo array attributi qui: http://documentcloud.github.com/backbone/#Model-constructor sono tentato di provare Backbone-relazionale, ma dal momento che Backbone stessa è ancora cambiando Ho paura di investire in estensioni che potrebbero non tenere il passo con il rapido sviluppo di Backbone. –
Ma vedo quando osservo nel codice che la funzione di inizializzazione di Backbone.Model accetta sia gli attributi che le opzioni. Colpa mia. –
I documenti non sono aggiornati. Vedi la [fonte del costruttore] (https://github.com/documentcloud/backbone/blob/master/backbone.js#L132) – shesek