2016-04-15 6 views
6

Ich habe eine iOS-Marktplatz-App, in der ich nach Änderungen für jeden Artikel lese, der auf diesem Marktplatz zum Verkauf steht. Genauer gesagt, ich höre, ob sich Kinder auf diesem Gegenstand ändern oder entfernt werden.Hören Sie sich die Artikel an, die auf hundert Kindern in Firebase hinzugefügt wurden.

Problem ist, dass ich darauf achten möchte, wenn auch Kinder hinzugefügt werden. Das Besondere beim Anhören, wenn ein Kind in Firebase hinzugefügt wird, ist, dass Sie alle Geschwister auf diesem Knoten erhalten, wenn Sie den Listener zum ersten Mal einrichten.

Die Kinder auf einem Gegenstand sind keine Listen des gleichen Gegenstandes, also kann ich nicht nach Kindern hören, die nach einem bestimmten Zeitstempel hinzugefügt wurden. Ich dachte darüber nach, something like this zu tun und diese anfänglichen Kinder zu ignorieren. Es scheint einfach so eine große Verschwendung zu sein, da ich die Dinge im Grunde genommen zweimal von Firebase abhole. Einmal mit FEventTypeValue und einmal mit FEventTypeChildAdded.

Die Elemente, auf die ich achten möchte, sind die Elemente, die in den Feed geladen werden. Es wäre höchstwahrscheinlich ein paar hundert Gegenstände, könnte aber möglicherweise Tausende von Gegenständen sein.

Wie würden Sie darüber gehen? Sollte ich einfach vergessen, auf zusätzliche Kinder zu hören, oder gibt es dafür eine vernünftige Lösung?

Edit (hinzugefügt Beispielcode):

Also das ist, wie ich die Daten für einen bestimmten Punkt auf Firebase holen.

var ref = new Firebase('https://<your-Firebase>.firebaseio.com'); 
ref.child('listings/-KB9ZqLZBEskoUihb-yR').once('value', function(snapshot) { 
    listing = snapshot.val(); 
}); 

Und hier möchte ich hören, wenn ein neues Kind zu diesem Element hinzugefügt wird:

ref.child('listings/-KB9ZqLZBEskoUihb-yR').on('child_added', function(snapshot) { 
    listing[snapshot.key()] = snapshot.val() 
}); 

Problem, das auf diesem Knoten, um Elemente zu hören ist hinzugefügt holt die alle untergeordneten Knoten wieder und das scheint wie eine riesige Verschwendung. Wie würdest du mit dieser Situation umgehen?

+1

Es gibt zu viel Text, der hier Code und Daten beschreibt. Bitte geben Sie den tatsächlichen Code und JSON (als Text, kein Screenshot) an, der die von Ihnen gewünschte Situation reproduziert. Siehe [MCVE] (http://stackoverflow.com/help/mcve). –

+0

Ist 'listings/-KB9ZqLZBEskoUihb-yR' ein bestimmter Artikel? Werden innerhalb dieses Knotens * Kinder hinzugefügt oder suchen Sie nach anderen Elementen, die mit dem Knoten * listings * hinzugefügt werden sollen. Irgendeine Firebase Struktur würde uns wirklich helfen und vielleicht ein bisschen Klärung der Frage. – Jay

+0

'Listings/-KB9ZqLZBEskoUihb-yR' ist ein bestimmtes Element und ich möchte darauf achten, wenn Kinder zu diesem bestimmten Element hinzugefügt wird. –

Antwort

3

Firebase hat die Unterstützung für das Abrufen der neu hinzugefügten untergeordneten Elemente zu einem bestimmten Knoten natürlich.

Hier ist die firebase documentation for retrieving data und Sie können wieder einen Blick auf den Abschnitt "Child Added" werfen. Ich zitiere nur einige wichtige Notizen von dort. auch

child_added wird einmal für jede bestehende Kind ausgelöst und dann wieder jedes Mal, wenn ein neues Kind auf den angegebenen Pfad

Und das

Für eine Bestellung ausgeführt werden hinzugefügt wird, ist es hat ein zweites Argument übergeben, das den Schlüssel des vorherigen untergeordneten Elements enthält.

Sie können sich das Beispiel auch anschauen.

// If we wanted to retrieve only the data on each new post added to our blogging app, we could use child_added 

// Get a reference to our posts 
var ref = new Firebase("https://docs-examples.firebaseio.com/web/saving-data/fireblog/posts"); 
// Retrieve new posts as they are added to our database 
ref.on("child_added", function(snapshot, prevChildKey) { 
    var newPost = snapshot.val(); 
    console.log("Author: " + newPost.author); 
    console.log("Title: " + newPost.title); 
    console.log("Previous Post ID: " + prevChildKey); 
}); 

Werfen Sie einen genauen Blick auf prevChildKey

So, hier könnte man diesen Trick tun, indem Sie Ihre Datenbank-Struktur ein wenig zu ändern, die suggested here ist. Aber ich denke, Sie haben bereits diese Bestellstruktur. Ich hoffe es hilft.

Verwandte Themen