firebase child_added事件问题

时间:2017-11-29 22:56:25

标签: javascript firebase firebase-realtime-database

我想最近在推送时从firebase数据库添加子节点,但根本不是数据库的最后一个子节点。

问题是,即使在第一次加载页面时,典型的child_added事件也会获得最后一个孩子。

即使此时没有添加新节点,此代码也会输出最后一个孩子。

firebase.database().ref("coupons").limitToLast(1).on('child_added', function(snapshot) {
   console.log(snapshot.val());
});

这个“黑客”现在对我有用,但是如何以适当的方式重写呢?

firebase.database().ref().on('child_changed', function() { // listen only when there are some changes in entire db, the key solution for this purpose.
   firebase.database().ref("coupons").limitToLast(1).on('child_added', function(snapshot) {
      console.log(snapshot.val());
   });
});

那么,为什么只有child_added侦听器工作,如果此时没有添加新节点?

2 个答案:

答案 0 :(得分:1)

我通过分配一个bool var来检查这一点,以检查第一次启动是否在页面加载时跳过firebase事件。

var child_added_first = true;
firebase.database().ref("coupons").limitToLast(1).on('child_added', function(snapshot) {
   if (!child_added_first) {
      console.log(snapshot.val());
   }
   child_added_first = false;
});

此外,' child_added'当我只是从控制台面板中的firebase数据库中删除一些节点时,由客户端上的firebase触发。为什么呢?

似乎是时候用更友好的api和文档来查看其他一些实时SaaS数据库。

答案 1 :(得分:1)

如果有时间节点,可以尝试以下代码。

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="http://old.static.jstree.com/v.1.0pre/jquery.jstree.js"></script>
<div id="jstree">
</div>