2012-07-23 412 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