【问题标题】:Retrieving Objects from Firebase using Value() Method使用 Value() 方法从 Firebase 中检索对象
【发布时间】:2015-03-29 00:27:04
【问题描述】:

我不知道如何像“child_added”那样获取“值”来读取我的 FB 对象中的数据。 以下代码:

  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 中看到的其他内容,其他一些人也遇到了类似的问题。非常感谢您查看我的问题并提供您可能拥有的任何见解。

【问题讨论】:

  • 在 10 分钟内被否决,没有评论为什么,我确定什么让某人感到满足。
  • 最有可能被否决的人认为使用console.log(note) 而不是note.noteObject 可以解决这个问题——这是调试中常见的下一步——显示比您预期的更大的数据集。此外,API docguide 将解释value 的返回值。因此,投反对票的人可能认为您可以再做一分钟的研究并找到解决方案。请注意,投反对票可能只是意味着该问题对对其他人没有用,不一定是拒绝。

标签: javascript json firebase


【解决方案1】:

您使用相同的postsRef 来监听valuechild_added 事件。这不是常见的使用模式。

value 事件在节点值更改时触发。因此,每当-J....NI3父节点 发生变化时,整个 节点都会作为snapshot 传递到您的回调中。如果您检查 Firebase 仪表板中的数据,您会发现此 父节点 节点没有 noteObject 子节点。

将其与child_added 事件进行比较,该事件在子节点添加到您侦听的节点时触发。在这种情况下,对child_added 的回调将新的子节点作为其snapshot 传递。并且新的子节点确实有一个noteObject 子节点。

您通常会在单个最低级别的节点上收听 value 事件。当你有一个节点集合时(就像你在这里做的那样),你通常会使用child_added(以及它的_changed_deleted_moved brethren)。但以防万一您真的想将on('value' 与集合一起使用:

postNotes.on('value', function(notesSnapshot) {
    notesSnapshot.forEach(function(noteSnapshot) {
        console.log(noteSnapshot.val());
    });
});

请注意,这种方法比监听各种 child_ 事件效率低,尤其是当您动态添加或更改集合中的子项时。

【讨论】:

  • 这里的效率是一个棘手的概念。它更高效、更惯用、更优雅,因为每个子节点都可以异步处理,并且在初始下载之后,只会来回发送更新。但是,对于初始下载,相同数量的数据以相同的方式从服务器传输(在一个批量收据中),因此它不会通过一次发送一条记录或任何类似性质的方式来减少内存使用,直到在远程数据的初始同步之后。
猜你喜欢
  • 2016-10-30
  • 1970-01-01
  • 2017-01-21
  • 1970-01-01
  • 1970-01-01
  • 2015-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多