我只有一次调用服务器,它返回我的应用程序的整个数据
[
{
"id": 1,
"count": 0,
"canGroup": true,
"childs": {
"group": [
{
"id": 0,
"count": 3,
"canGroup": true,
"childs": {
"user": [
{
"id": 0,
"count": 3,
"canGroup": true
}
...
]
}
] ...
}
...
]
如何使用Ember Data反序列化此模型?
答案 0 :(得分:1)
这个问题分为两部分。一个是如何构建模型来表示这些数据,第二个是如何修改传入的数据,以便Ember可以处理它。该模型,我们称之为group
,类似于:
// models/group.js
export default DS.Model.extend({
count: DS.attr(),
canGroup: DS.attr(),
childs: DS.hasMany('group')
});
现在我们需要告诉Ember Data,孩子们将进入父母的嵌入式。为此,我们将DS.EmbeddedRecordsMixin
混合到序列化程序中,并指定attrs
哈希,如下所示:
// serializers/group.js
export default DS.RESTSerializer(DS.EmbeddedRecordsMixin, {
attrs: {
childs: { embedded: 'always' }
}
然而,还有一个问题。默认情况下,Ember Data会期望childs
属性包含一系列的孩子。相反,您的数据包含childs
包含数组的group
属性。我们需要解决这个问题,我们将通过覆盖normalize
:
normalize(type, hash, prop) {
hash.childs= hash.childs.group;
return this._super(type, hash, prop);
}
});
还有其他问题需要担心,包括您是否希望Ember Data序列化嵌入的子级(写回服务器时),但上述内容应足以让您入门。
顺便说一下,我注意到你有两个id为0的不同组。这将使Ember Data大为混乱。尝试拥有唯一的ID。如果无法做到这一点,您可以考虑使用其他串行器逻辑来合成ID。