2015-11-18 13 views
5

Von der Firebase Anmerkung:Aktualisieren von verschachtelten Objekten Feuerbasis

ein einzelner Schlüsselpfad wie alanisawesome, Da updateChildren() nur Updates Daten auf der ersten untergeordneten Ebene, und alle Daten über die erste Kind Ebene geführt, in einem als setValue() behandelt werden Betrieb. Das Multipath-Verhalten ermöglicht die Verwendung längerer Pfade (wie alanisawesome/nickname), ohne Daten zu überschreiben. Aus diesem Grund unterscheidet sich das erste Beispiel vom zweiten Beispiel.

Ich versuche, eine einzige Funktion createOrUpdateData(object) in meinem Code zu verwenden. Im Falle einer Aktualisierung werden die Kinder der ersten Ebene korrekt aktualisiert, aber wenn ein verschachteltes Objekt übergeben wurde, löscht es alle anderen Eigenschaften dieses verschachtelten Objekts.

Hier ist der Code:

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!"); 
       } 
      }); 
     }); 
    } 

Also, wenn ich pass:

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

Dann wird es löschen andere Eigenschaften innerhalb externalLinks Objekt. Gibt es eine sauberere und einfachere Möglichkeit, dies zu vermeiden?

Kurz gesagt, wie stelle ich sicher, dass verschachtelte Objekte nur aktualisiert werden und dass Daten nicht gelöscht werden.

+0

Hat meine Antwort geholfen? –

+0

Hallo @DavidEast, danke, es funktioniert! Obwohl ich nicht versucht habe, ein Array innerhalb eines verschachtelten Objekts zu aktualisieren. –

Antwort

9

Sie können Multipfad-Updates verwenden.

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

"externalLinks/website" die Syntax im Objektliteral Mit ihr wird der verschachtelten Pfad als Update und nicht einen Satz für die verschachtelte Objekt behandeln. Dies verhindert, dass verschachtelte Daten gelöscht werden.

+0

Brilliant! Vielen Dank! – jpunk11

Verwandte Themen