L'evento child_changed fornisce solo informazioni su quale bambino immediato è stato modificato. Se un nodo più profondo in una struttura dati è cambiato, saprai quale figlio immediato è stato interessato ma non il percorso completo dei dati modificati. Questo è di design.
Se si desiderano aggiornamenti granulari su esattamente ciò che è stato modificato, è necessario associare ricorsivamente i callback a tutti gli elementi che si interessano. In questo modo, quando un elemento cambia, saprai qual è l'elemento in base al quale viene attivato il callback. Firebase è effettivamente ottimizzato per questo caso d'uso; collegare un numero elevato di callback, anche migliaia, dovrebbe funzionare correttamente. Dietro le quinte, Firebase aggrega tutte le callback insieme e sincronizza solo il set minimo di dati necessari.
Quindi, per il tuo esempio, se si desidera ottenere avvisati ogni volta che un nuovo elemento viene aggiunto per qualsiasi utente, è possibile effettuare le seguenti operazioni:
var usersRef = new Firebase("https://mydb.firebaseio.com/users");
usersRef.on("child_added", function(userSnapshot) {
userSnapshot.ref().child("items").on("child_added", function(itemSnapshot)
utils.debug(itemSnapshot.val());
});
});
Se si lavora con un numero molto elevato di utenti (centinaia di migliaia o milioni) e la sincronizzazione di tutti i dati è poco pratica, c'è un altro approccio. Piuttosto che fare in modo che il tuo server ascolti tutti i dati direttamente, puoi farlo ascoltare una coda di modifiche. Quindi, quando i client aggiungono articoli ai loro elenchi di articoli, potrebbero anche aggiungere un articolo a questa coda in modo che il server ne venga a conoscenza.
Questo è ciò che il codice del client potrebbe essere simile:.
var itemRef = new Firebase("https://mydb.firebaseio.com/users/MYID/items");
var serverEventQueue = new Firebase("https://mydb.firebaseio.com/serverEvents");
itemRef.push(newItem);
serverEventQueue.push(newItem);
Si potrebbe quindi avere il server in ascolto per child_added su quella coda e gestire gli eventi quando entrano in
fonte
2013-03-01 18:31:05
Il tuo "I may get" non corrisponde alla struttura che hai mostrato sopra; hai '" items ": {" 1 ": {" items "', inoltre, non puoi ottenere quel risultato ascoltando/users per 'child_changed'; si otterrebbe qualcosa di simile a questo: '{" items: {....}} ' – Kato
Ho corretto cosa posso ottenere., grazie – hiroshi