当我在特定eventType的引用上调用off
时,firebase似乎正在删除所有事件类型的所有回调。在下面的代码中,我想删除child_removed
事件的所有回调,同时保留child_added
事件的回调。我做错了吗?
<script src="https://cdn.firebase.com/js/client/2.3.1/firebase.js"></script>
<script>
var root_ref = new Firebase('https://jcatest.firebaseio.com');
root_ref.on('child_added', function(snap){
console.log('child:', snap.key(), snap.val());
});
root_ref.off('child_removed');
root_ref.child('foo_key').set('foo_val');
</script>
来自firebase文档:
&#34;如果未指定回调,则将删除指定eventType的所有回调。&#34; https://www.firebase.com/docs/web/api/query/off.html
我意识到我可以将回调作为第二个参数传递,但我想尽可能避免这样做。文档似乎表明这是可能的。
答案 0 :(得分:1)
<script src="https://cdn.firebase.com/js/client/2.3.1/firebase.js"></script>
<script>
var root_ref = new Firebase('https://jcatest.firebaseio.com');
var refChidAdded = root_ref.on('child_added', function(snap){
console.log('child:', snap.key(), snap.val());
});
//change here
var refChidRemoved = root_ref.on('child_removed', function(snap){
console.log('child:', snap.key(), snap.val());
});
refChidRemoved.off(); // OR root_ref.off('child_removed', refChidRemoved );
root_ref.child('foo_key').set('foo_val');
</script>
请从on()事件创建的引用中调用off()。
此外,通过删除额外变量的维护,可以直接执行此操作:
root_ref.on('child_removed').off()