Firebase child_removed未被调用

时间:2012-07-24 14:26:28

标签: firebase

这是我的代码的基本概念。我从我的实际代码中删除了很多额外的东西,但它主要是css - 它不会对此产生任何影响......

listRef.on('child_removed', function(childSnapshot, prevChildName) {
    alert('child removed!');
});

listRef.on('child_added', function(childSnapshot, prevChildName) {
    itemRef = childSnapshot.ref();

    alert('child added!);

    itemRef.on('value', function(snapshot){
        alert('item value changed!');

        var name = snapshot.val().name;  // if I remove this line, child_removed is called
        $("#name").html(name);
    });
});

$("#button").click(function() {
    itemRef.remove();
});

问题是在$("#button")点击时,itemRef会从Firebase中的listRef中删除,但'child_removed'事件永远不会被触发...如果我取出

driveRef = undefined;

然后调用child_removed ......

其他一切正常 - $("#name")已更新,我用来测试它的所有alert()对话框都运行良好 - 唯一的问题是child_removed没有被调用。

1 个答案:

答案 0 :(得分:1)

我认为加藤的评论是正确的。如果你在你的浏览器开发工具javascript控制台中查看,或者更好的是将其设置为中断所有异常(例如directions for Chrome),我打赌你会发现你的'value'回调是用snapshot.val()调用的移除子项时== null,因此您的代码会抛出异常,导致Firebase无法引发更多事件(即您的child_removed事件)。

我们计划进行一些功能工作,以使Firebase更容忍抛出异常的事件回调,但目前修复是在'value'回调中检查snapshot.val()== null。