Tengo un Backbone.Model llamado Company
. Mi modelo Company
tiene Employees
Backbone.Collection que contiene Employee
modelos.¿Cómo puedo pasar propiedades a un Backbone.Model que no deseo ser tratado como atributos?
Cuando instanciar mis modelos Employee
para completar la colección Employees
deseo que tengan una referencia al Company
al que pertenecen. Pero cuando paso Company
se convierte en uno de los atributos de Employee
. Este es un problema cuando voy a guardar el Employee
porque el método toJSON
contendrá un objeto Company
, cuando en la base de datos todo lo que almaceno es el entero de clave externa company_id
.
Ojalá hubiera un segundo parámetro para Backbone.Model que aceptaba propiedades del modelo que no son parte de los atributos principales. ¿Cómo puedo evitar esto? Me doy cuenta de que podría instanciar mis modelos Employee
y luego adjuntar el Company
, pero realmente quiero hacer todas las asignaciones en un "constructor" tradicional en lugar de adjuntar propiedades desde el exterior.
ej .:
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 muestra que sólo acepta una única matriz de atributos aquí: http://documentcloud.github.com/backbone/#Model-constructor estoy tentado a probar Backbone-relacional pero desde Backbone en sí todavía está cambiando Tengo miedo de invertir en extensiones que pueden no seguir el ritmo del rápido desarrollo de Backbone. –
Pero veo al buscar en el código que la función de inicialización de Backbone.Model toma atributos y opciones. Mi error. –
Los documentos no están actualizados. Ver el [origen del constructor] (https://github.com/documentcloud/backbone/blob/master/backbone.js#L132) – shesek