如何与包含多个模型的余烬jsonapi查询进行交互

时间:2018-12-17 14:05:05

标签: ember.js ember-data json-api

假设我在路线中进行查询

 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!"
    }
]

注意filtertopic没有任何关系,并且数据以正确的方式进入了灰烬存储。

原因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函数中效果很好

0 个答案:

没有答案