2015-10-24 86 views
0

反序列化複合模式我不得不返回我的應用程序的整個數據的服務器的單一調用與Ember數據

[ 
    { 
    "id": 1, 
    "count": 0, 
    "canGroup": true, 
    "childs": { 
     "group": [ 
     { 
      "id": 0, 
      "count": 3, 
      "canGroup": true, 
      "childs": { 
      "user": [ 
       { 
       "id": 0, 
       "count": 3, 
       "canGroup": true 
       } 
       ... 
      ] 
     } 
     ] ... 
    }  
    ... 
] 

我該怎麼做才能反序列化這個模型與Ember的數據?

+0

你的意思是反序列化? –

+0

謝謝,我更新了這個問題 –

回答

1

這個問題有兩個部分。一個是如何構建模型來表示這些數據,其次是如何修改傳入的數據,以便Ember可以處理它。該模型,我們稱之爲group,會是這樣的:

// models/group.js 
export default DS.Model.extend({ 
    count: DS.attr(), 
    canGroup: DS.attr(), 
    childs: DS.hasMany('group') 
}); 

現在,我們需要告訴灰燼數據,讓孩子們將在嵌入式要熬到父裏面。要做到這一點,我們混合了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); 
    } 
}); 

還有其他的問題不用擔心,包括是否要灰燼數據序列化嵌入式孩子(寫回來的時候到服務器),但上面的內容應該足以讓你開始。

順便說一下,我注意到你有兩個不同的組,ID爲0.這會大大混淆Ember數據。嘗試擁有唯一的ID。如果這不可行,您可以考慮使用附加的串行器邏輯來合成ID。