0

这是我的代码的基本思想。我从我的实际代码中删除了很多额外的东西,但它主要是 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没有被调用。

4

1 回答 1

1

我认为加藤的评论是正确的。如果您查看浏览器开发工具 javascript 控制台,或者最好将其设置为在所有异常情况下中断(例如Chrome 的说明),我敢打赌您会发现您的“值”回调正在使用 snapshot.val() == 调用null 当孩子被移除时,因此您的代码会引发异常,这会阻止 Firebase 引发更多事件(即您的 child_removed 事件)。

我们计划进行一些功能性工作,以使 Firebase 对引发异常的事件回调更加宽容,但目前的修复是在您的“值”回调中检查 snapshot.val() == null。

于 2012-07-24T15:38:14.743 回答