2012-07-23 355 views
1

我有我的應用程序現在的工作,但我不知道爲什麼它的工作原理...火力地堡child_added

我有類似這樣的代碼:

var itemRef; 

listRef.on('child_added', function(childSnapshot, prevChildName) { 
    itemRef = childSnapshot; 
}); 

的問題是,當我嘗試以後使用itemRef它不起作用。然而,我花了幾個小時才意識到該參考不起作用,因爲itemRef.name()返回了參考的正確名稱。

在搜索API時,我遇到了.ref()函數。 API指出.ref()返回「生成此DataSnapshot的位置的Firebase參考」。本作的功能聽起來完全沒有意義的給我,但我還是決定試一試:

var itemRef; 

listRef.on('child_added', function(childSnapshot, prevChildName) { 
    itemRef = childSnapshot.ref(); 
}); 

誰能向我解釋爲什麼.ref()讓我參考工作的時候它是所有回報「生成的位置的火力地堡參考這個DataSnapshot「。 ??

回答

4

Firebase公開了兩種不同類型的對象:Firebase referencesDataSnapshots

Firebase參考就像一條路徑。它只是指向Firebase中的某個位置。您可以使用它設置()數據,使用on()附加事件回調等。

DataSnapshot存儲在某個時間點從Firebase檢索的數據。它只包含數據。您可以調用.child(),.val()等來讀取數據,但不能用它來執行set()或任何其他Firebase操作。

因此,您的第一個代碼段不起作用,因爲它存儲的是與Firebase參考不同的快照。恰恰相反,兩個對象都有一個.name()函數,其行爲相同,這可能導致混淆。

+0

啊好的,所以DataSnapshot本質上是隻讀的我猜... 謝謝,很好地解釋一如既往。從目前爲止我所見過的Firebase我都很喜歡。保持良好的工作! – 2012-07-23 21:49:13