我在使用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#normalizePaylod
或labelSerializer#extractArry
中完成的JSON的任何操作都按预期工作。
相反,当连接到远程服务器时,值的结果数组是0和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]
}
]