我想最近在推送时从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
侦听器工作,如果此时没有添加新节点?
答案 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>