【问题标题】:How to auto-create many-to-many relations from initial JSON with Backbone Relational?如何使用 Backbone Relational 从初始 JSON 自动创建多对多关系?
【发布时间】:2012-07-25 01:02:03
【问题描述】:

example from docs about many-to-many relationship 假设公司将在人员创建后添加。

但是,如果人员数据来自已包含公司列表(公司 ID)的服务器怎么办?

是否可以修改示例,以便可以使用以下代码(或类似 smt.):

// somewhere before we have a collection of companies defined like this:
// [{id: 1, name: 'ibm'}, {id: 2, name: 'apple'}]
// and than we do:
paul = new Person({
    name: 'Paul',
    jobs: [1, 2]
})
paul.get('jobs').at(0).get('name') // 'ibm'

当尝试以与一对多关系相同的方式实现这一目标时,我失败了:

Companies = Backbone.Collection.extend({model: Company})
companies = new Companies([{id: 1, name: 'ibm'}, {id: 2, name: 'apple'}])

john = new Person({
    name: 'John',
    jobs: [1]
})

john.get('jobs').toJSON() // []
companies.get(1).get('employees').toJSON() // []

这是你可以玩的小提琴:http://jsfiddle.net/ymr5Z/

【问题讨论】:

    标签: backbone.js many-to-many backbone-relational


    【解决方案1】:

    您的主要问题是您试图通过 ID 添加Jobs。你从来没有创建过任何工作对象,更不用说设置他们的 id 了!你只创建了公司。

    添加工作的更好方法是使用 addJob() 函数,您可以在该函数中提供公司 ID(或公司),然后它会为您创建 Job 模型。

    Full Code 适合您的示例

    特别是:

    var Person = Backbone.RelationalModel.extend({
        relations: [{
            type: 'HasMany',
            key: 'jobs',
            relatedModel: Job,
            reverseRelation: {
                key: 'person'
                //includeInJSON: false //if you don't want to show person
            }
        }],
        addJob: function (company) {
            this.get('jobs').add(new Job({
                company: company
            }));
        }
    });
    
    paul.addJob(1);
    paul.addJob(2);
    

    完美运行。您可能还想为您在 Job 上的反向关系设置 includeInJSON 为 false 以排除此人!

    [{
        "company": {
            "id": 1,
            "name": "ibm",
            "employees": [null]
        },
        "person": {
            "name": "Paul",
            "jobs": [null, {
                "company": {
                    "id": 2,
                    "name": "apple",
                    "employees": [null]
                }
            }]
        }
    }, {
        "company": {
            "id": 2,
            "name": "apple",
            "employees": [null]
        },
        "person": {
            "name": "Paul",
            "jobs": [{
                "company": {
                    "id": 1,
                    "name": "ibm",
                    "employees": [null]
                }
            },
            null]
        }
    }]
    

    【讨论】:

      猜你喜欢
      • 2012-03-02
      • 1970-01-01
      • 2010-12-10
      • 2011-09-05
      • 2022-08-20
      • 1970-01-01
      • 2017-07-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多