2015-10-06 38 views
1

當我針對特定eventType的引用調用off時,firebase似乎將刪除所有事件類型的所有回調。在下面的代碼中,我想刪除child_removed事件的所有回調,同時保留child_added事件的回調。我做錯了嗎?Firebase關閉刪除所有eventType的所有回調

<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> 

從火力文檔:

「如果沒有指定一個回調,指定的EVENTTYPE所有的回調都將被刪除。」 https://www.firebase.com/docs/web/api/query/off.html

我知道我可以通過回調作爲第二個參數,但我想避免這樣做,如果可能的話。文件似乎表明這是可能的。

+1

我跑了幾個測試,這是稍微有點複雜:當你調用'關閉(「child_removed」)'火力地堡停止射擊' child_ *'事件。如果你有一個'value'事件監聽器,那*會在off('child_removed')後繼續激發。我會問,這是否是預期的行爲。 –

+0

@FrankvanPuffelen任何更新? –

+1

它確實看起來像Firebase SDK中的錯誤。沒有修復的時間表,所以你可能想暫時解決它。 –

回答

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() 
+0

是的,我知道我可以做到這一點。我想盡量避免追蹤一堆額外的變量。 –

+0

通過避免額外的變量:root_ref.on('child_removed')。off() –

+1

正確的語法是'root_ref.off('child_removed',refChidRemoved);'(on()方法返回函數,而不是ref) 。 – Kato