Ember模型未命名的JSON变量

时间:2016-05-27 16:01:38

标签: ember.js ember-data

我正在尝试在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”中定义第一个变量。虽然我无法弄清楚如何做到这一点,因为这个变量依赖于文件名。

任何帮助将不胜感激。感谢。

1 个答案:

答案 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标准化响应。