2016-06-02 14 views
4

Ich habe die Firebase-Dokumentation immer wieder gelesen und brauche nur einige Erläuterungen. Dies bezieht sich nicht auf meinen spezifischen Code, sondern auf mein Verständnis von Firebase im Allgemeinen.Firebase Value und ChildAdded (weitere Erklärung benötigt)

Ich weiß, dass .Value alle Daten jedes Mal abruft, wenn es aufgerufen wird und weiterhin die Datenbank auf Änderungen überwacht. Und .ChildAdded sucht nach Änderungen in den Kindern der Referenz. Ruft .ChildAdded auch alle Werte zuerst ab? Sollte ich sowohl .Value als auch .ChildAdded für den gleichen Pfad implementieren? Wenn nicht, wenn ich versuche, nur .ChildAdded zu tun, zeigt sich nichts, aber wenn ich .Value laufen lasse, erscheinen alle meine Einzelteile, wie sie sollen. Was ich nicht möchte, ist, dass jeder Wert jedes Mal, wenn ein einzelner Wert geändert oder hinzugefügt wird, erneut aus der Datenbank abgerufen wird, da dies später anscheinend zu Bandbreitenproblemen führen würde, wenn ich Tausende von Elementen abrufen muss. Wäre der beste Workflow, eine .Value-Funktion (getAllItems()) mit ObserveSingleEventOfType zu erstellen, so dass sie nur einmal aufgerufen wird und dann eine doppelte Funktion hat (getNewItems()) außer mit .ChildAdded und observeEventOfType?

Antwort

2

, wenn Sie diesen Knoten haben

node:{ 
    data1:"data", 
    data2:{ 
    subdata1:1, 
    subdata2:2 
    } 
} 

Value mit observeEventOfType wird das erste Mal + jedes Mal etwas in "node" Änderungen genannt werden, Value mit observeSingleEventOfType wird nur einmal

Child_Added mit observeEventOfType aufgerufen wird zweimal aufgerufen ["data1" (es wird die Zeichenfolge "Daten" und "data2" enthalten (es wird ein Objekt mit den Childs "subdata1" undenthalten„]

Child_Changed mit observeEventOfType wird jedes Mal "data1" oder "data2" geändert

verwendet Dies kann

(ein Ereignis in "data2" jedes Mal "subdata1" oder "subdata2" ändern, oder wenn Sie ein "subdata3" einfügen genannt wird) werden genannt werden, in Kombination, aber es hängt in jedem Szenario ...

für den Ereignistyp:

in der Regel, wenn Sie an einem Endknoten wieverweisenSie verwenden Value und wenn Sie in einem Knoten sind, die eine Liste von ähnlichen Knoten wie "data2" hat verwenden Sie eine Kombination aus child_added, child_changed und child_removed

für den Betrachter TYP:

es ist einfach, wenn Sie erhalten möchten der Wert zu einem bestimmten Zeitpunkt; Sie verwenden den "Einzelereignisbeobachter". Wenn Sie den Wert im Laufe der Zeit im Auge behalten möchten, verwenden Sie "Ereignisbeobachter"

+0

Sinn macht. Wenn meine Struktur wie data2 ist, warum würde .ChildAdded nicht funktionieren, um alle Werte im Knoten anfänglich zu holen (und weiterhin nach Zusätzen zu suchen), aber .Wert funktioniert? –

+0

Wenn Ihre Struktur wie data2 Kind hinzugefügt wird wird zweimal aufgerufen, 1) der Rückruf snapshot.key wird Subdata1 sein und der Wert wird 1 sein; 2) der Callback snapshot.key wird subdata2 und der Wert wird 2. – Ymmanuel

+0

Es wird auf diese Weise aufgerufen, um zu vermeiden, alle Daten über das Netzwerk die ganze Zeit senden, sendet es nur die neuen Daten als child_changed sendet nur die Daten, die geändert – Ymmanuel

Verwandte Themen