我还在学习ember.js,并且遇到了一个包含数据并没有解析模型中查找关系的ember数据的障碍。我有一个模特'网站'这基本上是每个其他模型的查找表,以根据位置区分数据。
此时,我做错了什么或错过了一个关键概念 - 可能两者......(或者也许是凌晨!)
网站模型(即查找表)
import DS from 'ember-data';
export default DS.Model.extend({
code: DS.attr(),
name: DS.attr(),
});
网站模型与我的所有其他模型之间存在hasMany关系(完成时大约为12)
关联模式
import DS from 'ember-data';
import { belongsTo } from 'ember-data/relationships';
export default DS.Model.extend({
site: belongsTo('site'),
last: DS.attr(),
first: DS.attr(),
active: DS.attr('boolean'),
fullName: Ember.computed('first', 'last', function() {
return `${this.get('first')} ${this.get('last')}`;
}),
});
'关联模式'也将与' site'一起查找。在其他一些模型中。
我通过JSON API规范提供数据,但我不包括关系数据,因为根据我的理解,它应该使用网站ID属性来删除网站数据。
{
"links": {
"self": "/maint/associates"
},
"data": [
{
"type": "associate",
"id": "1",
"attributes": {
"site": "6",
"last": "Yoder",
"first": "Steven",
"active": "1"
},
"links": {
"self": "/associates/1"
}
}
]
}
在我的模板文件中,我引用了associate.site,这给了我一个错误。
<(未知mixin):ember431>
如果我使用associate.code或.name来匹配网站模型,则模板中不会显示任何内容。来自'网站的代码' table是我真正希望在模板中显示的数据。
所以显而易见的问题是:
我错了,Ember Data应该解决这个问题,还是我需要解决的问题 在我的API响应中包含关系?
我意识到我属于'员工'仅限模型参考 网站,而我想要site.code,所以我如何建立这种关系 知道或访问我的'关联的字段模型
我没有在'网站中包含hasMany关系。因为 会有很多。我需要做一个反向关系吗? 其他型号?我见过的例子并没有显示出hasMany 关系设置。
当我在ember检查器中查看模型时,站点字段不是 包含在模型中。即使我没有得到正确的数据 它还应该出现吗?
到目前为止,我喜欢使用ember,只需要理解并克服这个障碍
更新:我的后端JSON库只会根据当前规范
生成关系链接"related": "/streams/1/site"
但是ember数据会调用
"相关":" / sites / 1"
解决关系
所以@Adam Cooper的回答是正确的,如果您回答时生成链接,或者只能根据当前规范生成链接。
答案 0 :(得分:1)
如果你正在使用默认的JSONAPIAdapter,你希望你的回复看起来像这样:
{
"links": {
"self": "/maint/associates"
},
"data": [{
"type": "associate",
"id": "1",
"attributes": {
"last": "Yoder",
"first": "Steven",
"active": "1"
},
relationships: {
"site": {
"links": {
related: "/sites/6"
}
}
}
}]
}
这将允许Ember Data通过其关系查找网站。现在,Ember正在尝试访问Ember Data无法填充的网站模型,因此您将获得错误。另外,你可以做一些返回活动的实际布尔值。