У меня есть Backbone.Model с именем Company
.
Моя модель Company
имеет Employees
Backbone.Collection, содержащий модели Employee
.
Когда я создаю экземпляр моделей Employee
для заполнения коллекции Employees
, я хочу, чтобы у них была ссылка на Company
, к которой они принадлежат. Но когда я передаю Company
, он становится одним из атрибутов Employee
. Это проблема, когда я иду, чтобы сохранить Employee
, потому что метод toJSON
будет содержать объект Company
, когда в базе данных все, что я храню, является целым числом внешнего ключа company_id
.
Я бы хотел, чтобы был второй параметр для Backbone.Model, который принял свойства модели, которые не являются частью основных атрибутов. Как я могу обойти это? Я понимаю, что могу создать экземпляры моделей Employee
, а затем прикрепить Company
, но я действительно хочу выполнять все назначения в традиционном "конструкторе", а не добавлять свойства снаружи.
например:.
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