Ember 数据关系未解决
Ember Data relationships not resolved
我仍在学习 ember.js 并且 运行 遇到了障碍 ember 数据无法解析模型中的查找关系。我有一个模型 'site',它基本上是对所有其他模型的查找 table,以根据位置区分数据。
在这一点上,我做错了什么或遗漏了一个关键概念 - 可能两者都...(或者可能是凌晨!)
站点模型(即查找table)
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')}`;
}),
});
'associate model' 在某些其他模型中也将与 'site' 一起查找。
我通过 JSON API 规范提供数据,但我没有包括关系数据,因为据我所知,ember 数据应该下拉使用站点 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,这给了我一个错误。
<(unknown mixin):ember431>
如果我使用 associate.code 或 .name 来匹配网站模型,模板中将不会显示任何内容。 'site' table 中的代码是我真正想要在模板中显示的数据。
所以显而易见的问题:
我错了 Ember 数据应该解决这个问题还是我需要
在我的 API 回复中包含关系?
我意识到我在 'associate' 模型中的 belongsTo 仅引用
站点,而我想要 site.code,那么我该如何建立这种关系
已知或访问我的 'associate' 模型中的字段?
我没有在 'site' 模型中包含 hasMany 关系,因为
会有很多。我需要做一个反向关系吗
其他型号?我见过的例子并不都显示 hasMany
关系设置。
当我在 ember 检查器中查看模型时,站点字段不是
包含在模型中。即使我没有得到正确的数据
它还应该出现吗?
到目前为止我喜欢ember,只需要了解并克服这个障碍
更新:我的后端 JSON 库只会根据当前规范生成关系链接
"related": "/streams/1/site"
但 ember 数据调用
"related": "/sites/1"
解决关系
所以@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 返回一个实际的布尔值。
我仍在学习 ember.js 并且 运行 遇到了障碍 ember 数据无法解析模型中的查找关系。我有一个模型 'site',它基本上是对所有其他模型的查找 table,以根据位置区分数据。
在这一点上,我做错了什么或遗漏了一个关键概念 - 可能两者都...(或者可能是凌晨!)
站点模型(即查找table)
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')}`;
}),
});
'associate model' 在某些其他模型中也将与 'site' 一起查找。
我通过 JSON API 规范提供数据,但我没有包括关系数据,因为据我所知,ember 数据应该下拉使用站点 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,这给了我一个错误。
<(unknown mixin):ember431>
如果我使用 associate.code 或 .name 来匹配网站模型,模板中将不会显示任何内容。 'site' table 中的代码是我真正想要在模板中显示的数据。
所以显而易见的问题:
我错了 Ember 数据应该解决这个问题还是我需要 在我的 API 回复中包含关系?
我意识到我在 'associate' 模型中的 belongsTo 仅引用 站点,而我想要 site.code,那么我该如何建立这种关系 已知或访问我的 'associate' 模型中的字段?
我没有在 'site' 模型中包含 hasMany 关系,因为 会有很多。我需要做一个反向关系吗 其他型号?我见过的例子并不都显示 hasMany 关系设置。
当我在 ember 检查器中查看模型时,站点字段不是 包含在模型中。即使我没有得到正确的数据 它还应该出现吗?
到目前为止我喜欢ember,只需要了解并克服这个障碍
更新:我的后端 JSON 库只会根据当前规范生成关系链接
"related": "/streams/1/site"
但 ember 数据调用
"related": "/sites/1"
解决关系
所以@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 返回一个实际的布尔值。