2017-01-06 3 views
3

例えばNormalizrNormalizr

は私が最初のオブジェクトを持って使用して親と同じタイプのネストされたスキーマが含まれている私のペイロードを(正規化しようとしている問題のビットを有する再帰的なモデ​​ルのためのスキーマを定義する方法メニュー)には、セクションがあるオブジェクトの配列である子(セクション)があり、セクションが深くなります。

{ 
    id: 123, 
    sections: [{ 
    id: 1, 
    sections:[{ id: 4, sections: [ id: 5, sections: [] ] }] 
    }, { 
    id: 2, 
    sections:[] 
    }, { 
    id: 3, 
    sections:[] 
    }] 
} 

私は、最初のパスのために働いsectionsスキーマにリンク定義のセクションを持っていたmenuスキーマを作成することによって開始したが、その後のセクションの子供を処理しませんので、私はそれ以降を追加しました同じ名前のsectionスキーマ内の定義(ショットに値する)でしたが、機能しませんでした。

const section = new schema.Entity('sections') 

const sections = new schema.Entity('sections', { 
    sections: section 
}) 

const menu = new schema.Entity('menu', { 
    sections: [ sections ] 
}) 

section.define({ sections }) 

私は、以下のオブジェクトで終わることを望んでいる:

{ 
    entities: { 
    menu: { 
     sections: [1, 2, 3] 
    }, 
    sections: [{ 
     1: { id: 1, sections: [4] }, 
     2: { id: 2, sections: [] }, 
     3: { id: 3, sections: [] }, 
     4: { id: 4, sections: [5] }, 
     5: { id: 5, sections: [] }, 
    }] 
    } 
} 
+0

は動作しないことにしましたか?これは私が使用したより新しい構文のように見えますが、なぜ動作しないのか分かりません。 – kwelch

+0

私はそれがうまくいけば、質問を投稿していないでしょう! :D – tutts

+0

良い点は、セッション名が同じである可能性がありますか?あなたは定義し、形で自己を使用しようとしましたか? – kwelch

答えて

11

あなたsectionsスキーマがArrayする必要があります。

const section = new schema.Entity('sections') 
const sections = new schema.Array(section); 
section.define({ sections }); 
const menu = new schema.Entity('menu', { sections }); 

次に、それを使用して...

const data = { 
    id: 123, 
    sections: [{ 
    id: 1, 
    sections:[{ id: 4, sections: [ { id: 5, sections: [] } ] }] 
    }, { 
    id: 2, 
    sections:[] 
    }, { 
    id: 3, 
    sections:[] 
    }] 
}; 

normalize(data, menu) 

が返されます:

{ 
    "entities": { 
    "sections": { 
     "1": { "id": 1, "sections": [ 4 ] }, 
     "2": { "id": 2, "sections": [] }, 
     "3": { "id": 3, "sections": [] }, 
     "4": { "id": 4, "sections": [ 5 ] }, 
     "5": { "id": 5, "sections": [] } 
    }, 
    "menu": { 
     "123": { "id": 123, "sections": [ 1, 2, 3 ] } 
    } 
    }, 
    "result": 123 
} 
+1

ありがとうPaul、完全に見落とされた 'schema.Array'。 Gitubの問題で投稿して申し訳ありません!素晴らしい応答を感謝し、すばらしい週末を過ごしてください – tutts

関連する問題