我有一个/ 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响应是否缺少某些内容?
答案 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' },
}
});