1

我的应用程序现在可以运行,但我不确定它为什么会运行...

我有一些类似的代码:

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 的位置的 Firebase 参考”。??

4

1 回答 1

5

Firebase 公开了两种不同类型的对象:Firebase 引用DataSnapshots

Firebase 引用就像一条路径。它只是指向 Firebase 中的一个位置。您可以使用它来设置()数据,使用 on()附加事件回调等。

DataSnapshot 存储在某个时间点从 Firebase 检索到的数据。它只包含数据。您可以调用 .child()、.val() 等来读取数据,但不能使用它来执行 set() 或任何其他 Firebase 操作。

因此,您的第一个代码段不起作用,因为它存储了与 Firebase 引用不同的快照。碰巧这两个对象都有一个行为相同的 .name() 函数,这可能在这里引起了混乱。

于 2012-07-23T21:30:55.650 回答