tl; dr;你應該使用MyRoom.on('value',
你的情況。
您通常存儲兩種基本類型的數據在火力地堡:
對象,你通常存儲這樣
對象:
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 obj = snapshot.val();
alert(JSON.stringify(val)); // {Name: 'This is my room', Owner: 'frank', Marker1:'foo'}
alert(val.Marker1); // foo
});
在這裏,您總能得到即使在更新它的單個屬性之後,也是如此。
集合
集合是對象的名單。但集合本身也是對象,因此您可以使用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) {
// somebody added a property to MyRoom
});
的時候你可能會想「把一個集合就像一個對象」的一個例子:https://stackoverflow.com/a/25551254/209103
那怎麼快照的作品。 .val()返回值,它返回undefined,除非它包含名稱爲Marker1的另一個對象。在你的情況下,它只包含'foo' – webduvet 2014-08-28 09:40:47