我有一个/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;
}
对于上面提到的json,运行queriesLength((将返回0。
1( console.log中没有问题。
2( 浏览器网络显示api正确地返回了输出。
3( 当访问startdatetime等其他属性时,它会返回正确的值。
模型/api响应是否缺少什么?
JSONAPI
序列化程序。当来自其他模型的数据包含在响应的数据中时,它被称为embedded record
。
如果您可以控制后端,请切换到使用包含关系的JSONAPI规范。如果你不这样做,
切换到使用DS.RestSerializer
和嵌入式记录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' },
}
});