假设我在路线中进行查询
RSVP.hash({
topics: this.get('store').query('topic', {'filter': data})
})
和后端响应jsonapi
一起包含两个模型:
"data": [{
"type": "topic",
"id": "1",
"attributes": {
"title": "JSON:API!"
}
"type": "filter",
"id": "1",
"attributes": {
"title": "JSON:API!"
}
]
注意:filter
与topic
没有任何关系,并且数据以正确的方式进入了灰烬存储。
原因:filter
-是一些元数据,在查询topic
的过程中已经存在于后端,并且“昂贵”地进行类似
this.get('store').query('filter', {'filter': data})
问题:如何在结果Ember中识别type
,或者通常如何在一个响应中处理多种类型(无关联)?
RSVP.hash({
topics: this.get('store').query('topic', {'filter': data})
}).then((res) => {
res.topics.forEach((i) => {
//detect which i type here
})
});
更新:我在res.topics.get('content.'+index+'.modelName')
处找到了所需的数据,但看来这是一种不好的方法
+1 作为选项,我将filter
放入meta
并尝试normalize
this.store.normalize('filter', res.nodes.get('meta.filters'))
但由于错误而跌倒:
string.js:63 Uncaught TypeError: Cannot read property 'replace' of undefined
at Cache.func (string.js:63)
at Cache.get (ember-metal.js:2611)
at decamelize (string.js:100)
at Cache.func (string.js:11)
at Cache.get (ember-metal.js:2611)
at Object.dasherize (string.js:104)
at normalizeModelName (-private.js:1298)
at Class.modelNameFromPayloadKey (json-api.js:401)
at Class._extractType (json-api.js:386)
at Class.normalize (json-api.js:428)
非常奇怪,因为相同的数据在pushPayload
函数中效果很好