使用Value()方法从Firebase检索对象

时间:2015-03-29 00:27:04

标签: javascript json firebase

我无法弄清楚如何获取“值”来读取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);
});

...在控制台中显示: enter image description here

这是FB控制台中的数据: enter image description here

我不使用任何库。我只想在我的页面加载时显示FB中的数据,并在每次将新数据推送到FBDB时继续更新。

我是否错过了“值”参数的要点?我能做得更好吗? enter image description here

请放弃那些涉及诸如“阅读文档”,“使用jquery”或其他无用的答案的答案,一些StackO用户似乎非常喜欢。 我一直在挖掘我的这个问题几个小时,根据我在StackO中看到的其他一些问题,其他一些人也有类似的问题。非常感谢您查看我的问题并提供您可能拥有的任何见解。

1 个答案:

答案 0 :(得分:4)

您使用相同的postsRef来收听valuechild_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_事件的效率,尤其是在动态添加或更改集合中的子项时。