【发布时间】:2019-03-28 17:23:28
【问题描述】:
我正在使用 Ember 3.1 和 JSON:API 格式从后端获取数据。
我的模型如下所示:
// Continent model
export default DS.Model.extend({
name: attr('string'),
countries: hasMany('countries'),
});
// Country model
export default DS.Model.extend({
name: attr('string'),
president: belongsTo('president'),
regions: hasMany('region')
});
// President model
export default DS.Model.extend({
name: attr('string')
});
// Region model
export default DS.Model.extend({
name: attr('string')
});
获取我的模型的方式是:
fetchInformation: task(function* () {
yield get(this, 'store')
.findRecord('continent', continent,
{
include: 'countries,'
+ 'countries.president,'
+ 'countries.regions'
}
).then((continent) => {
get(continent, 'countries.firstObject') // This one gets resolved properly
get(continent, 'countries.firstObject.president') // Get Proxy object
get(continent, 'countries.firstObject.regions.firstObject') // Get Proxy object
})
我认为通过使用“包含”和服务器回复为 JSON:API 规范,我可以访问所有这些属性。
在我看来,这些嵌套关系似乎需要以某种方式解决。
我错过了什么?有什么方法可以轻松使用嵌套模型?
【问题讨论】:
-
关系是 Ember Data 中默认的承诺。为了更清楚地理解它们是 PromiseProxyObjects:承诺将方法和属性代理到解析的对象。您可以在 Ember 指南中找到有关该行为的更多信息:guides.emberjs.com/release/models/relationships/… 您可以通过设置
{ async: false }来禁用它,但您应该知道自己在做什么,因为这会禁用相关数据的延迟获取。
标签: ember.js ember-data json-api