Firebase off会删除所有eventTypes的所有回调

时间:2015-10-06 07:34:09

标签: javascript firebase

当我在特定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

我意识到我可以将回调作为第二个参数传递,但我想尽可能避免这样做。文档似乎表明这是可能的。

1 个答案:

答案 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()