2016-04-15 16 views
6

Ho un'app di mercato iOS, dove sto ascoltando le modifiche su ciascun articolo che è in vendita su quel mercato. Più precisamente, sto ascoltando se i bambini su quell'articolo cambiano o vengono rimossi.Ascolta gli elementi aggiunti su centinaia di bambini in Firebase

Il problema è che voglio ascoltare quando vengono aggiunti anche i bambini. La particolarità dell'ascolto di quando un bambino viene aggiunto su Firebase è che ottieni tutti i fratelli su quel nodo quando si imposta per la prima volta il listener.

I bambini su un elemento non sono elenchi dello stesso elemento, quindi non riesco ad ascoltare i bambini aggiunti dopo un determinato timestamp. Stavo pensando di fare something like this e ignorare quei bambini iniziali. Sembra un così grande spreco, dal momento che essenzialmente sto recuperando le cose da Firebase due volte. Una volta con FEventTypeValue e una volta con FEventTypeChildAdded.

Gli elementi che voglio ascoltare sono gli elementi che vengono caricati nel feed. Molto probabilmente sarà un paio di centinaia di articoli, ma potrebbe potenzialmente contenere migliaia di articoli.

Come andresti su questo? Dovrei semplicemente dimenticare tutto dell'ascolto per i bambini aggiunti o c'è una soluzione decente per questo?

Edit (codice di esempio aggiunto):

Quindi questo è come mi recuperare i dati per un elemento specifico in Firebase.

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

E qui voglio ascoltare per quando viene aggiunto un nuovo bambino a tale voce:

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

problema è che l'ascolto di voci aggiunto su quel nodo recupera tutti i nodi figli di nuovo e che sembra come un enorme spreco. Come affronteresti questa situazione?

+1

C'è troppo testo che descrive codice e dati qui. Si prega di fornire il codice effettivo e JSON (come testo, senza screenshot) che riproduce la situazione che stai chiedendo. Vedi [MCVE] (http://stackoverflow.com/help/mcve). –

+0

E 'un annuncio/-KB9ZqLZBEskoUihb-y' un articolo specifico? Ci sono dei bambini aggiunti * all'interno di * quel nodo o stai cercando altri elementi da aggiungere con il nodo * lists *. Qualche struttura di Firebase ci aiuterebbe davvero e forse un po 'di chiarimento della domanda. – Jay

+0

'elenchi/-KB9ZqLZBEskoUihb-y' è un elemento specifico e desidero ascoltare quando i bambini vengono aggiunti a quell'elemento specifico. –

risposta

3

Firebase ha il supporto per il recupero dei nuovi figli aggiunti a un nodo specifico, naturalmente.

Ecco lo firebase documentation for retrieving data e si potrebbe dare di nuovo un'occhiata alla sezione "Aggiunti ai bambini". Sto solo citando alcune note importanti da lì.

child_added viene attivato una sola volta per ogni bambino esistente e poi di nuovo ogni volta che un nuovo figlio viene aggiunto al percorso specificato

E questo

Per scopi di ordinare, ma è anche passato un secondo argomento contenente la chiave del figlio precedente.

Puoi dare un'occhiata anche all'esempio.

// 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); 
}); 

Avere uno sguardo da vicino prevChildKey

Così, qui si potrebbe fare questo trucco cambiando la struttura del database un po 'che è suggested here. Ma, penso che tu abbia già quella struttura per gli ordini. Spero che sia d'aiuto.

Problemi correlati