我的应用程序现在正在运行,但我不确定它为什么会运行...
我有一些类似的代码:
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参考”。 ??
答案 0 :(得分:4)
Firebase公开了两种不同类型的对象:Firebase references和DataSnapshots。
Firebase参考就像一条路径。它只是指向Firebase中的某个位置。您可以使用它来设置()数据,使用on()等附加事件回调。
DataSnapshot存储在某个时间点从Firebase检索到的数据。它只包含数据。您可以调用.child(),. value()等来读取数据,但不能使用它来执行set()或任何其他Firebase操作。
因此,您的第一个代码段不起作用,因为它存储的快照与Firebase参考不同。碰巧两个对象都有一个行为相同的.name()函数,这可能会引起混淆。