我在我的一个Ember模型中访问某些嵌套数据时遇到了一些麻烦。以下是JSON响应...
import DS from 'ember-data';
export default DS.RESTSerializer.extend({
normalizeResponse(store, primaryModelClass, payload, id, requestType)
{
payload = {
entries: payload.entries
};
return this._super(store, primaryModelClass, payload, id, requestType);
}
});
这是我当前的序列化程序
function getHost(href){
return Object.assign(document.createElement('a'), { href }).host;
}
我试图在我的模板中获取条目。也许我需要一些帮助来更好地使用NormalizeResponse序列化这个?我很难过,所以请分享一下,如果你有任何想法!
谢谢!
答案 0 :(得分:0)
ember-data RESTAdapter
期望JSON根据相应模型的attribute-name - attribute-value包含与模型名称和值对应的键,这些键是具有键值对的JSON对象的数组 - 类型定义*。
因此,如果您有一个名为entry
的模型包含header: attr('string'), body: attr('string')
,则以下JSON应该会导致商店中出现entry
:
{
"entries": [{
"header": "header test",
"body": "body test body test body test",
"id": "5a3960253d578doc735798511"
}],
}
有一种方法可以说服ember-data自定义id字段名称(接受_id
而不是id
)。内置复数规则应该包括entry->条目复数(但我无法保证)。
无论如何都应忽略与模型名称不对应的任何顶级键,因此无需手动过滤掉(除非您有名为field
或total
的模型。
如果您在路线的模型挂钩中return this.store.findAll('entry')
(或query('entry',{/*something*/}
),则应该可以在控制器的模板中查看{{#each model as |entry|}}
。
(最好不要使用model
作为模型名称,但如果您希望它是entries
,则必须明确指定某处,即控制器或路径{{ 1}}方法。)
*重复模型名称作为json响应中的顶级键(可能是同名的API端点)的重点是,如果你打算将它们添加到商店也是。