包括嵌套模型,但访问代理对象

时间:2019-03-28 09:02:50

标签: ember.js ember-data json-api

我正在使用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
      })

我认为,通过使用'include'和服务器以JSON:API规范的形式答复,我将可以访问所有这些属性。

在我看来,那些嵌套关系需要以某种方式得到解决。

我想念什么?有什么方法可以轻松使用嵌套模型?

1 个答案:

答案 0 :(得分:0)

好吧,在hasMany和belongsTo中添加{async:false}似乎可以解决问题。

// Continent model
export default DS.Model.extend({
  name: attr('string'),
  countries: hasMany('countries', {async: false}),
});

// Country model
export default DS.Model.extend({
  name: attr('string'),
  president: belongsTo('president', {async: false}),
  regions: hasMany('region', {async: false})
});

// President model
export default DS.Model.extend({
  name: attr('string')
});

// Region model
export default DS.Model.extend({
  name: attr('string')
});