fetchRelated没有提取相关

Jon*_*ell 5 javascript backbone.js backbone-relational

一直试图让它运行一段时间.基本上我有一个休息api作为后端返回json,一切都很好.

我遇到的问题是骨干关系.我确定我错了,但我一直在寻找网络一段时间,找不到任何帮助.

我试图在"职业"和"武器"模型之间建立很多关系.这是我的代码:

Profession = Backbone.RelationalModel.extend({
    urlRoot: '../api/professions',

    relations: [{
        type: Backbone.HasMany,
        key: 'weapons',
        relatedModel: 'Weapon',
        collectionType: 'Weapons',
        reverseRelation: {
            key: 'profession',
            includeInJSON: 'id',
            keySource: 'profession_id'
        }
    }]
});

Weapon = Backbone.RelationalModel.extend({
    urlRoot: '../api/weapons'
});
Weapons = Backbone.Collection.extend({
    model: Weapon,

    url: function(models){
        return '../api/weapons';
    }
});
Run Code Online (Sandbox Code Playgroud)

并调用那些api端点返回:

{name: "Profession1", id: 1}

[{name: "Weapon1", profession_id: 1}, {name: "Weapon2", profession_id: 1}]
Run Code Online (Sandbox Code Playgroud)

所以,如果我理解正确,profession.fetchRelated('weapons')应该发送一个httprequest到武器集合的url并拉出具有1的profession_id的对象.但是当我运行时没有任何反应profession.fetchRelated('weapons')

Edw*_*ith 9

所以,如果我理解正确一个profession.fetchRelated('武器')应该发送一个httprequest到武器集合的url并拉出具有profession_id为1的对象.但是当我运行profession.fetchRelated('weapon'时没有任何反应)

这不是我理解Backbone-relational工作的方式 - 我注意到我正在使用旧版本,并且尚未调查最新版本.

根据我的理解,Backbone-relational需要的数据看起来与您的API响应不同.

我认为Backbone-relational想要在父模型响应中引用嵌套模型,要么完全嵌套:

{
  name: "Profession1", 
  id: 1, 
  weapons: [
    {name: "Weapon1", profession_id: 1}, 
    {name: "Weapon2", profession_id: 1}
  ]
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,它将完全填充嵌套模型.

或者,作为参考:

{
  name: "Profession1", 
  id: 1, 
  weapons: ['weapon1','weapon2']
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,Backbone-relational将在内部隐藏相关键,但呈现一个空集合.然后,您将fetchRelated用于获取相关模型的完整数据:

assassin.fetchRelated('weapons')
Run Code Online (Sandbox Code Playgroud)

这使得ID为武器的请求'weapon1''weapon2',无论是作为个人的请求,或者如果你的API接受一组请求,一个请求,我们期待的回应是这样的:

{id: 'weapon1', name: "Weapon1", profession_id: 1}
Run Code Online (Sandbox Code Playgroud)

我不是,我不知道是否有快速,内置的方式来处理您的API响应,然后编写自定义函数.