Ember 模型未命名 JSON 变量
Ember model unnamed JSON variable
我正在尝试在 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
}
]
这是我的第一个模型 "snippet":
export default Model.extend({
url: attr('string'),
files: hasMany('file')
});
然后是我的 "file" 模型,我用它创建了一个 hasMany 关系:
export default Model.extend({
name: attr()
});
index.js 路线:
export default Ember.Route.extend({
model() {
return this.store.findAll('snippet');
}
});
我意识到这行不通,因为我没有在 "files" 中定义第一个变量。虽然我不知道该怎么做,因为这个变量取决于文件名。
如有任何帮助,我们将不胜感激。谢谢。
你需要用 embeded record mixin
实现 json serializer
看看这个 link
https://guides.emberjs.com/v2.0.0/models/customizing-serializers/#toc_embeddedrecordmixin
比您需要实施 normalizefindAllresponse
检查此 link 以了解此类方法
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.
的响应
我正在尝试在 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
}
]
这是我的第一个模型 "snippet":
export default Model.extend({
url: attr('string'),
files: hasMany('file')
});
然后是我的 "file" 模型,我用它创建了一个 hasMany 关系:
export default Model.extend({
name: attr()
});
index.js 路线:
export default Ember.Route.extend({
model() {
return this.store.findAll('snippet');
}
});
我意识到这行不通,因为我没有在 "files" 中定义第一个变量。虽然我不知道该怎么做,因为这个变量取决于文件名。
如有任何帮助,我们将不胜感激。谢谢。
你需要用 embeded record mixin
实现 json serializer
看看这个 link
https://guides.emberjs.com/v2.0.0/models/customizing-serializers/#toc_embeddedrecordmixin
比您需要实施 normalizefindAllresponse 检查此 link 以了解此类方法 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.
的响应