我正在尝试在Ember中使用以下JSON响应。
[
{
"url": "https://example.com",
"files": {
"config.json": {
"name": "config.json"
},
"style.css": {
"name": "style.css"
}
},
"user": null
},
{
"url": "https://newexample.com",
"files": {
"settings.json": {
"name": "settings.json"
},
"index.html": {
"name": "index.html"
}
},
"user": null
}
]
这是我的第一个模型“片段”:
export default Model.extend({
url: attr('string'),
files: hasMany('file')
});
然后我的“文件”模型与我创建了一个hasMany关系:
export default Model.extend({
name: attr()
});
index.js route:
export default Ember.Route.extend({
model() {
return this.store.findAll('snippet');
}
});
我意识到这不起作用,因为我没有在“files”中定义第一个变量。虽然我无法弄清楚如何做到这一点,因为这个变量依赖于文件名。
任何帮助将不胜感激。感谢。
答案 0 :(得分:1)
您需要使用serializer
实现json embeded record mixin
查看此链接
https://guides.emberjs.com/v2.0.0/models/customizing-serializers/#toc_embeddedrecordmixin
比你需要实现normalizefindAllresponse 检查此链接是否有此类方法 http://emberjs.com/api/data/classes/DS.JSONSerializer.html
所以最后你想要的代码是 snippet.js序列化程序
export default DS.JSONSerializer.extend(DS.EmbeddedRecordsMixin, {
attrs: {
files: { embedded: 'always' }
},
normalizeFindAllResponse(store, primaryModelClass, payload, id, requestType) {
payload = {snippet: payload};
// normalize your payload or json at here, it should be like as i explain below
payload.snippet
return this.normalizeArrayResponse(...arguments);
},
});
确保您的json采用此格式
[
{
"url": "https://example.com",
"files": [
{
"name": "config.json"
},
{
"name": "style.css"
}
],
]
阅读此文档以获取帮助。 http://thejsguy.com/2015/12/05/which-ember-data-serializer-should-i-use.html 基本上你需要根据你的需要使用序列化器,而不是从api标准化响应。