我无法弄清楚如何获取“值”来读取FB对象中的数据,就像“child_added”一样。 以下代码:
postNotes.on("value", function(snapshot){
console.log("VALUE FUNCTION REACHED")
var note = snapshot.val();
console.log(note.noteObject);
});
postNotes.on("child_added", function(snapshot){
console.log("CHILDADDED FUNCTION REACHED");
var note = snapshot.val();
console.log(note.noteObject);
}, function (errorObject) {
console.log("The read failed: " + errorObject.code);
});
...在控制台中显示:
这是FB控制台中的数据:
我不使用任何库。我只想在我的页面加载时显示FB中的数据,并在每次将新数据推送到FBDB时继续更新。
我是否错过了“值”参数的要点?我能做得更好吗?
请放弃那些涉及诸如“阅读文档”,“使用jquery”或其他无用的答案的答案,一些StackO用户似乎非常喜欢。 我一直在挖掘我的这个问题几个小时,根据我在StackO中看到的其他一些问题,其他一些人也有类似的问题。非常感谢您查看我的问题并提供您可能拥有的任何见解。
答案 0 :(得分:4)
您使用相同的postsRef
来收听value
和child_added
个事件。这不是常用的模式。
当节点的值发生更改时,将触发value
事件。因此,只要 -J....NI3
的父节点发生更改,整个父节点就会以snapshot
的形式传递给您的回调。如果您检查Firebase信息中心中的数据,则会发现此父节点没有noteObject
个孩子。
将其与child_added
事件进行比较,该事件在子节点添加到您侦听的节点时触发。在这种情况下,回调到child_added
会将新的子节点作为其snapshot
传递。并且新的子节点确实有一个noteObject
孩子。
您通常会在单个最低级节点上收听value
个事件。当你有一组节点时(就像你在这里一样),你通常会使用child_added
(及其_changed
,_deleted
和_moved
兄弟。但是,如果您真的想将on('value'
与集合一起使用:
postNotes.on('value', function(notesSnapshot) {
notesSnapshot.forEach(function(noteSnapshot) {
console.log(noteSnapshot.val());
});
});
请注意,这种方法的效率低于收听各种child_
事件的效率,尤其是在动态添加或更改集合中的子项时。