这里是 Ember 新手...
// working with
Ember : 1.13.6
Ember Data : 1.13.7
__
/api/locations
{
"locations":[
{
"id":"1",
"uri":"/location/1",
"name":"ATLANTA"
},
{
"id":"2",
"uri":"/location/2",
"name":"NORTH VIRGINIA"
}
]
}
__
/api/hosts/1/show
{
"id": 1,
"active": true,
"location_uri": "/location/1"
}
单个主机包含对位置的引用,但在查看主机信息时我没有位置 ID,只有“location_uri”,我希望我可以使用它来手动查找此记录,并且显示主机显示页面时包含在模型中。
......我想显示位置的名称而不是此 uri,并且我想将其链接回主机显示页面的实际位置。我需要一些如何做到这一点的想法?
我想了解如何在我的商店中查找记录,如下所示:
this.store.find('location', {uri: this.model('location')})
但是何时何地使用是我遇到的麻烦。或者,即使我只是手动进行 api 调用来获取位置数据,并以某种方式将其包含在我的主机显示模型中,这也是一个有用的技巧。
我很确定我不能为此使用关系,因为它并不真正存在于 JSON 中,对吧?
最佳答案
实际上,您可以通过关系来做到这一点,但您必须覆盖适配器和/或序列化器。
如果您扩展 JSONAPISerializer,您可能会将主机响应序列化为如下所示:
{
id: "1",
type: "host",
attributes: {
active: true
},
relationships: {
location: {
links: {
related: "/location/1"
}
}
}
}
假设这是您的 /models/host.js
:
导出 DS.Model.extend({
事件: DS.attr('boolean'),
位置: DS.belongsTo('位置')
});
这是您的models/location.js
:
导出 DS.Model.extend({
名称: DS.attr('字符串')
})
然后你可以做类似的事情
this.store.find('host', '1').then(host => console.log(Ember.get(host, 'location.name')))
<小时/>
我建议永远不要在 .find()
调用中覆盖 uri
,而是在适配器上设置它,并构建一个不错的序列化器。
关于javascript - Ember - 通过商店或新的 ajax 调用手动链接到另一个模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36438670/