tl; dr; Sie sollten MyRoom.on('value',
für Ihren Fall verwenden.
Sie speichern typischerweise zwei grundlegende Arten von Daten in Firebase:
Objekte
Objekte Sie in der Regel wie folgt speichern:
var MyRoom = new Firebase('your.firebaseio.com/someroom');
MyRoom.set({Name: 'This is my room', Owner: 'frank', Marker1:'bar'});
Wenn Sie aktualisieren möchten/Patch ein Objekt, was Sie tun, wie Sie es oben tun:
MyRoom.update({Marker1:'foo'});
für Änderungen an diesem bestimmten Raum zu hören, verwenden Sie:
MyRoom.on('value', function(snapshot) {
var obj = snapshot.val();
alert(JSON.stringify(val)); // {Name: 'This is my room', Owner: 'frank', Marker1:'foo'}
alert(val.Marker1); // foo
});
Hier bekommen Sie immer die gesamten Objekte, auch nachdem Sie eine einzelne Eigenschaft davon aktualisieren.
Kollektionen
Sammlungen sind Listen von Objekten. Aber Sammlungen sind selbst auch Objekte, so dass Sie eine Sammlung mit on('value'
überwachen können. Aber das würde bedeuten, dass Sie ständig mit dem gesamten Array umgehen müssen, was meistens nicht praktikabel ist.
Normalerweise behandeln Sie die einzelnen Einträge in der Sammlung. Firebase verfügt über spezifische Ereignisse für das Hinzufügen/Löschen/Aktualisieren der Sammlung. Also für neue Objekte zu hören, die zu einer Sammlung hinzugefügt werden, was Sie tun:
var MyRooms = new Firebase('your.firebaseio.com/rooms');
MyRooms.push({Name: 'This is my room', Owner: 'frank', Marker1:'bar'});
MyRooms.on('child_added', function(snapshot) {
alert(snapshot.val());
});
Kollektionen sind Objekte sind Sammlungen sind Objekte sind ...
Ihre Verwirrung rührt von der Tatsache, dass Sie die abmischen Sammlungslogik und Objektlogik von oben. Obwohl dies nicht oft das ist, was Sie wollen, ist es vollständig gültiger Code, weshalb er ausgeführt wird; nur nicht mit dem Ergebnis, das du suchst.
Ein Beispiel, wie Sie „behandelt ein Objekt wie eine Sammlung“ verwenden könnten:
var MyRoom = new Firebase('your.firebaseio.com/someroom');
MyRoom.update({Marker2:'snafu'});
MyRooms.on('child_added', function(snapshot) {
// somebody added a property to MyRoom
});
Ein Beispiel, wann Sie wollen „eine Sammlung wie ein Objekt behandeln“: https://stackoverflow.com/a/25551254/209103
Das ist, wie Schnappschuss funktioniert. .val() gibt den Wert zurück und gibt undefined zurück, es sei denn, es enthält ein anderes Objekt mit dem Namen Marker1. In Ihrem Fall enthält es nur 'foo' – webduvet