这是我的代码的基本概念。我从我的实际代码中删除了很多额外的东西,但它主要是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
没有被调用。
答案 0 :(得分:1)
我认为加藤的评论是正确的。如果你在你的浏览器开发工具javascript控制台中查看,或者更好的是将其设置为中断所有异常(例如directions for Chrome),我打赌你会发现你的'value'回调是用snapshot.val()调用的移除子项时== null,因此您的代码会抛出异常,导致Firebase无法引发更多事件(即您的child_removed事件)。
我们计划进行一些功能工作,以使Firebase更容忍抛出异常的事件回调,但目前修复是在'value'回调中检查snapshot.val()== null。