嵌套对象列表未在emberjs中反序列化

时间:2018-08-05 16:58:30

标签: ember.js ember-data ember-cli

我有一个/ reports api,返回的输出如下:

 {
  "data": {
    "id": 87,
    "type": "reports",
    "attributes": {
      "status": "STARTED",
      "startdatetime": 1532511531000,
      "enddatetime": 1533485380052,
      "queries": [
       {
        "startdatetime": 1532511531000,
        "enddatetime": 1533485380056,
        "reportId": 87,
        "id": "Q1"
      }
    ]
   }
  }
}

模型如下:

model / report.js

status: DS.attr('string'),
startdatetime: DS.attr('number'),
enddatetime: DS.attr('number'),
queries: DS.hasMany('query')

model / query.js:

report : DS.belongsTo('report'),
startdatetime: DS.attr('number'),
enddatetime: DS.attr('number')

在我的组件(template.js)中,我尝试访问查询,但似乎无法对其进行反序列化:

queriesLength: Ember.computed('report', function(){
  return this.get('report').get('queries').length;
}

正在运行的queryLength()对于上述json返回0。

1)console.log中没有问题。

2)浏览器网络显示api正确返回了输出。

3)访问诸如startdatetime之类的其他属性时,它将返回正确的值。

模型/ api响应是否缺少某些内容?

1 个答案:

答案 0 :(得分:0)

默认情况下,Ember Data使用JSONAPI序列化器。当来自其他模型的数据包含在响应数据中时,称为embedded record

如果您可以控制后端,请切换为使用包含关系的JSONAPI规范。否则,

切换为使用DS.RestSerializer和Embedded Records Mixin:

https://emberjs.com/api/ember-data/3.3/classes/DS.EmbeddedRecordsMixin

使用生成器ember generate serializer report创建新的序列化器

// serializers/report.js
import DS from 'ember-data';

export default DS.RESTSerializer.extend(DS.EmbeddedRecordsMixin, {
  attrs: {
    queries: { embedded: 'always' },
  }
});