2015-11-18 43 views
5

Dalla nota Firebase:Aggiornamento oggetti nidificati Firebase

Dato un unico percorso chiave come alanisawesome, updateChildren() solo aggiorna i dati al primo livello del bambino, e tutti i dati passati in oltre il primo livello di bambino è un trattato come un setValue() operazione. Il comportamento a percorsi multipli consente di utilizzare percorsi più lunghi (come alanisawesome/nickname) senza sovrascrivere i dati. Questo è il motivo per cui il primo esempio differisce dal secondo esempio.

Sto cercando di utilizzare una singola funzione createOrUpdateData(object) nel mio codice. In caso di aggiornamento, aggiorna correttamente i bambini di primo livello, ma se ho passato un oggetto nidificato, cancella tutte le altre proprietà di quell'oggetto nidificato.

Ecco il codice:

function saveUserDetails(email,object){ 
     var hashedEmail = Utilities.getHashCode(email); 
     var userRef = ref.child(hashedEmail); 
     return $q(function(resolve,reject){ 
      return userRef.update(object, function(error){ 
       if(error){ 
        reject(error); 
       }else{ 
        resolve("Updated successfully!"); 
       } 
      }); 
     }); 
    } 

Quindi, se mi passa:

{ 
    name: 'Rohan Dalvi', 
    externalLinks: { 
     website: 'mywebsite' 
    } 
} 

allora sarà eliminare le altre proprietà all'interno dell'oggetto externalLinks. C'è un modo più semplice e pulito per evitare questo?

In breve, come faccio a verificare che gli oggetti nidificati vengano aggiornati e che i dati non vengano cancellati.

+0

La mia risposta è stata di aiuto? –

+0

Ciao @DavidEast, grazie funziona! Anche se non ho provato ad aggiornare una matrice all'interno di un oggetto nidificato. –

risposta

9

È possibile utilizzare gli aggiornamenti del percorso multiplo .

var userRef = ref.child(hashedEmail); 
var updateObject = { 
    name: 'Rohan Dalvi', 
    "externalLinks/website": 'mywebsite' 
}; 
userRef.update(updateObject); 

Utilizzando la sintassi "externalLinks/website" nell'oggetto letterale tratterà il percorso annidato come aggiornamento e non un set per l'oggetto annidato. Ciò impedisce l'eliminazione dei dati nidificati.

+0

Brillante! Grazie! – jpunk11

Problemi correlati