Ember数据嵌入式JSON没有Id且没有根对象

时间:2015-07-23 10:01:18

标签: ember.js ember-data

我正在使用Ember和Ember数据。但我收到的JSON与Ember侧载标准不相上下。 JSON确实没有根模型。此外,模型是嵌入式的,有时会有ID,有时也没有Id。

我已经看过几个关于如何使用提取挂钩添加根模型的链接,以及如何使用

来使用嵌入式模型
App.ColorSerializer = DS.RestSerializer.extend(DS.EmbeddedRecordsMixin, {
  attrs: {
    foos: {embedded: 'always'}
  }
});

此代码取自this链接。

这是那里使用的JSON

{
 colors:[
  {
    id: 1,
    color: "red",
    foos:[
      {
        id:1,
        name:'something 1'
      },
      {
        id:2,
        name:'something 2'
      }
    ]
  },
 ...

现在我遇到的问题是我的JSON也可能如下所示(没有根型号"颜色")

{
    id: 1,
    color: "red",
    foos:[
      {
        id:1,
        name:'something 1'
      },
      {
        id:2,
        name:'something 2'
     }
  ]
},
...

或甚至喜欢这个(没有foo对象的ID)

{
    id: 1,
    color: "red",
    foos:[
      {
        name:'something 1'
      },
      {
        name:'something 2'
     }
  ]
},
...

有什么方法可以解决这个问题吗?如何将Ids添加到嵌入式模型foo?还有一些解决方案/插件可以接受任何类型的嵌入式JSON并将其转换为侧载JSON并在需要时添加ID。

我见过this解决方案。它真的有效吗?因为它不使用最新的 EmbeddedRecordsMixin

1 个答案:

答案 0 :(得分:3)

我对数组使用了泛型变换:

// /transforms/array.js
import DS from "ember-data";
import Ember from "ember";

export default DS.Transform.extend({
    deserialize: function (value) {
        if (Ember.isArray(value)) {
            return Ember.A(value);
        } else {
            return Ember.A();
        }
    },
    serialize: function (value) {
        if (Ember.isArray(value)) {
            return Ember.A(value);
        } else {
            return Ember.A();
        }
    }
});

然后在我的模型中,我只使用:

foos: DS.attr("array")