繁体   English   中英

如何将属性传递给Backbone.Model,我不希望将其作为属性处理?

[英]How can I pass properties into a Backbone.Model which I do not wish to be treated as attributes?

我有一个名为Company的Backbone.Model。 My Company模型有一个包含Employee模型的Employees Backbone.Collection。

当我实例化我的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

您可以随时从options对象中手动读取它并随意存储它。 选项作为第二个参数传递给initialize方法:

var Employee = Backbone.Model.extend({
    initialize: function(attributes, options) {
        this.company = options.company;
    }
});
var shesek = new Employee({name: 'Nadav'}, {company: Foobar});

或者,您可以使用Backbone-relational ,这样可以更轻松地处理包含对其他模型和集合的引用的模型。

您可能还有兴趣使toJSON()递归 (我提交给他们的问题跟踪器的补丁)

您可以覆盖模型上的save方法,将保存记录转换为仅发送名称和公司ID。

Employee = Backbone.Model.extend({
   save: function() {
       var toSend = {name:this.get('name'),company_id: this.get('company').get('id')}
       // method to send toSend to server.
   }
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM