Ember-cli反序列化数组错误

时间:2014-08-13 05:54:26

标签: ember.js ember-data ember-cli

我在使用ember-cli和ember数据反序列化数组时遇到了问题。 我的模型如:

Label=DS.Model.extend
   ..
   days:DS.hasMany('day')

Day = DS.Model.extend
    hours: DS.attr()

收到的JSON是:

labels:[
  {
   id: 1
   days:[{
      hours: [1,10, 33, 44,55,21]
   }]
  }
]

现在:我可以使用Embedded正确管理EmbeddedREcordMixin记录,但只要反序列化hours数组,它就会转换为:

[0,0,0,0,1,0,0,0,1,0,0,0,0]

删除所有原始值。

我尝试定义一个特定的转换,或者将关系更改为async并规范化特定labelSerializer中的有效负载,但似乎没有任何效果,我无法识别数组的位置实际修改..

解决方案

最后,这是接收数据集的问题。有些id的记录会覆盖其他记录,从而产生误导性结果。 使用EmberData 1.0.0.beta8,不需要ArrayTransform。简单地DS.attr()完成了这项工作。

修改

我在非ember-cli应用程序上尝试过相同的实现,但它运行正常。我在LabelSerializer中使用EmbeddedRecordsMixin来处理日嵌入式hasMany关系,以及自定义normalizePayload和extractArray函数以修复ids等小问题。 但我对Ember-cli很新,我不确定我是否遗漏了一些东西。需要特殊配置才能使用ActiveModelAdapter和EmbeddedRecordsMixin?

EDIT2 关于edit1的所有内容都无效...

EDIT3 经过更多的测试,这不是Ember-cli的问题。 当我通过store.pushPayload()测试反序列化时,对labelSerializer#normalizePaylodlabelSerializer#extractArry中完成的JSON的任何操作都按预期工作。 相反,当连接到远程服务器时,值的结果数组是0和1的集合。

1 个答案:

答案 0 :(得分:1)

我与Ember-Cli和Ember Data有类似的问题。我这样解决了:

我在Ember-cli项目的转换文件夹中创建了一个名为 array.js 的文件。 (你可以随意调用文件)

<强>变换/ array.js

import DS from 'ember-data';

export default DS.Transform.extend({
  deserialize: function(serialized) {
    return serialized;
  },

  serialize: function(deserialized) {
    return deserialized;
  }
});

然后在我的模型中,我这样做了:

<强> somemodel.js

import DS from 'ember-data';

export default DS.Model.extend({
    listOfSomething: DS.attr('array') //same name as the transform-file you created
});

查看Ember CLI文档Using modules and the resolver

修改

在仔细查看您的示例后,我发现JSON的格式与Ember所期望的格式不同。如果您查看Ember Documentation on relationship between models,您的JSON应该如下所示:

labels:[
  {
   id: 1
   days:[1]
  }
]

days: [
    {
        id: 1,
        hours: [1, 10, 33, 44, 55, 21]
    }
]