简而言之,你应该在你的情况下使用MyRoom.on('value',
。
你通常在Firebase中存储两种基本类型的数据:
对象
对象通常是这样存储的:
var MyRoom = new Firebase('your.firebaseio.com/someroom');
MyRoom.set({Name: 'This is my room', Owner: 'frank', Marker1:'bar'});
如果您想更新/修补一个对象,您需要按照上述方式进行操作:
MyRoom.update({Marker1:'foo'})
要监听此特定房间的更改,您可以使用:
MyRoom.on('value', function(snapshot) {
var val = snapshot.val();
alert(JSON.stringify(val));
alert(val.Marker1);
});
在这里,即使您只更新了一个属性,您仍然会获得整个对象。
集合
集合是对象的列表。但集合本身也是对象,因此您可以使用on('value'
监视集合。但这意味着您必须不断地处理整个数组,这通常是不实际的。
您通常要处理集合中单独的条目。Firebase有特定的事件用于添加/删除/更新集合中的条目。因此,要监听添加到集合中的新项目,您需要执行以下操作:
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());
});
集合是对象,对象是集合,集合是对象,对象是...
你的困惑源于混淆了上面所述的集合逻辑和对象逻辑。虽然这通常不是你想要的结果,但它是完全有效的代码,这就是为什么它可以执行的原因;只是没有得到你想要的结果。
以下是一个如何“将对象视为集合”的示例:
var MyRoom = new Firebase('your.firebaseio.com/someroom');
MyRoom.update({Marker2:'snafu'});
MyRooms.on('child_added', function(snapshot) {
});
当你需要“将集合视为对象”时的示例:https://stackoverflow.com/a/25551254/209103