JSON响应中的Ember嵌套数据

时间:2017-12-19 21:23:05

标签: ember.js ember-data

我在我的一个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序列化这个?我很难过,所以请分享一下,如果你有任何想法!

谢谢!

1 个答案:

答案 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->条目复数(但我无法保证)。

无论如何都应忽略与模型名称不对应的任何顶级键,因此无需手动过滤掉(除非您有名为fieldtotal的模型。

如果您在路线的模型挂钩中return this.store.findAll('entry')(或query('entry',{/*something*/}),则应该可以在控制器的模板中查看{{#each model as |entry|}}(最好不要使用model作为模型名称,但如果您希望它是entries,则必须明确指定某处,即控制器或路径{{ 1}}方法。)

*重复模型名称作为json响应中的顶级键(可能是同名的API端点)的重点是,如果你打算将它们添加到商店也是。