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')
所以,如果我理解正确一个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响应,然后编写自定义函数.