我还在学习ember. js,遇到了一个障碍,因为灰烬数据不能解决模型中的查找关系。我有一个模型“站点”,它基本上是每个其他模型的查找表,以根据位置区分数据。
在这一点上,我做错了什么,或者错过了一个关键概念——可能两者都有…(或者可能是凌晨!)
站点模型(即查找表)
import DS from 'ember-data';
export default DS.Model.extend({
code: DS.attr(),
name: DS.attr(),
});
网站模型将与我所有其他模型有许多关系(完成后约为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')}`;
}),
});
在其他一些模型中,“关联模型”也将与“站点”一起查找。
我通过JSONAPI规范提供数据,但我不包括关系数据,因为据我所知,余烬数据应该使用站点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这给我一个错误。
如果我使用关联. code或.name来匹配站点模型,则模板中不会显示任何内容。“站点”表中的代码是我真正想在模板中显示的数据。
所以显而易见的问题是:
>
我认为Ember Data应该解决这个问题是错误的,还是我需要将关系包含在我的API响应中?
我意识到,当我想要site. code时,我在“关联”模型中的物品只引用站点,那么如何使这种关系为人所知或访问“关联”模型中的字段呢?
我没有在“站点”模型中包含has多关系,因为会有很多关系。我需要在其他模型中做逆关系吗?我看到的例子并不都显示了has多关系设置。
当我在灰烬检查器中查看模型时,模型中不包含站点字段。即使我没有得到正确的数据,它还应该显示吗?
到目前为止我喜欢灰烬,只需要理解并克服这个障碍
更新:我的后端JSON库只会根据当前规范生成关系链接
"related": "/streams/1/site"
但是余烬数据确实调用
"相关":"/站点/1"
来解决关系
因此,如果您按照Adam Cooper的回答生成链接,或者您只能根据当前规范生成链接,则@Adam Cooper的回答是正确的。
如果您使用的是默认的JSONAPIAdapter,您希望您的响应如下所示:
{
"links": {
"self": "/maint/associates"
},
"data": [{
"type": "associate",
"id": "1",
"attributes": {
"last": "Yoder",
"first": "Steven",
"active": "1"
},
relationships: {
"site": {
"links": {
related: "/sites/6"
}
}
}
}]
}
这将允许Ember数据通过它的关系查找站点。现在Ember正在尝试访问Ember数据无法填充的站点模型,因此出现了错误。顺便说一句,你可能也可以为active返回一个实际的布尔值。