我有一个 JSON-Api 后端,但我找不到处理继承对象的好方法,因为 Route 资源名称是父类,但有效负载中的“类型”属性对应于子类。有效负载示例(GET /api/pets):
{
"data": [
{
"id": "1",
"type": "cat",
"attributes": {
"name": "Tom"
}
},
{
"id": "2",
"type": "dog",
"attributes": {
"name": "Max"
}
]
}
现在,我使用 Route 加载它:
# app/routes/pets.js
import Route from '@ember/routing/route';
export default Route.extend({
model() {
return this.get('store').findAll('pet');
}
});
楷模:
# app/models/pet.js
import DS from 'ember-data';
export default DS.Model.extend({
name: DS.attr('string')
});
# app/models/cat.js
import DS from 'ember-data';
import Pet from './pet';
export default Pet.extend({
});
# app/models/dog.js
import DS from 'ember-data';
import Pet from './pet';
export default Pet.extend({
});
最后,我想在一个简单的页面上显示它们:
# app/templates/devices.hbs
<h3>Pets list</h3>
{{#each model as |pet|}}
<h4>{{pet.name}}</h4>
{{/each}}
Route 很好地加载了对象(我在 Ember 检查器中看到了它们),但是没有Pet
对象,所以它们没有被渲染。在这一点上,我不知道如何处理,而不改变api结构。