2017-01-12 2 views
2

Ich normalisiere eine eine Ebene verschachtelte Liste von Losen. Wo die Chargen der ersten Ebene Master genannt werden, sind die verschachtelten Slaves.Wie bekomme ich einen Verweis auf die verschachtelten Entitäten in normalizr?

// my schema 
const lot = new schema.Entity('lots'); 
const lots = new schema.Array(lot); 
lot.define({slaves: lots}); 

// my data 
const list = [ 
    { 
    id: 1, 
    name: 'Lot #1', 
    slaves: [ 
     { 
     id: 2, 
     name: 'Lot #2' 
     } 
    ] 
    }, { 
    id: 4, 
    name: 'Lot #4', 
    slaves: [] 
    } 
]; 

normalize(list, lots); 

Und ich bekomme diese:

{ 
    entities : { 
    lots: { 
     '1': { 
     id: 1, 
     name: 'Lot #1', 
     slaves: [2] 
     }, 
     '2': { 
     id: 2, 
     name: 'Lot #2' 
     }, 
     '4': { 
     id: 4, 
     name: 'Lot #4', 
     slaves: [] 
     } 
    } 
    }, 
    result : [1, 4] 
} 

Es mit ihm etwas nicht in Ordnung ist. Aber ich möchte dem normalisierten Ergebnis noch etwas hinzufügen und weiß nicht wie.

  • haben die Stammlosken auf den normalisierten Sklaven
  • Eine Reihe von Sklaven ids auch auf das Ergebnis

So wird das vorherige Beispiel wie folgt normiert werden:

{ 
    entities : { 
    lots: { 
     '1': { 
     id: 1, 
     name: 'Lot #1', 
     slaves: [2] 
     }, 
     '2': { 
     id: 2, 
     name: 'Lot #2', 
     master: 1 
     }, 
     '4': { 
     id: 4, 
     name: 'Lot #4', 
     slaves: [] 
     } 
    } 
    }, 
    result : { 
    masters: [1, 4], 
    slaves: [2], 
    } 
} 

Ist das mit normalizr möglich?

Antwort

2

haben die Stammlosken auf den normalisierten Sklaven

Dies ist auf jeden Fall möglich, eine individuelle processEntity Funktion. Es gibt eine example here. Kurz:

const processStrategy = (value, parent, key) => ({ 
    ...value, 
    master: key === 'slaves' ? parent.id : undefined 
}); 
const lot = new schema.Entity('lots', { processStrategy }); 

Eine Reihe von Sklaven ids auch auf das Ergebnis

Dies ist nicht möglich. Die result ist immer abhängig von dem an normalize übergebenen Eintragsschema.

+0

Danke für die schnelle Antwort! –

Verwandte Themen