2015-06-24 13 views
0

「上下文」 是Firebase.on的第四參數「上下文」 Firebase.on的說法是不工作

on(eventType, callback, [cancelCallback], [context]) 

https://www.firebase.com/docs/web/api/query/on.html

上下文對象*可選

如果提供,此在調用你的回調函數時將使用這個對象。

但它似乎不工作。

<!DOCTYPE html> 
<html> 
<head> 
    <meta charset="UTF-8"> 
    <title>firebase sample</title> 

    <script src="bower_components/firebase/firebase-debug.js"></script> 
</head> 
<body> 

    <script> 
    (function() { 
     var listener = { 
     onChildAdded: function (snapshot) { 
      console.log(this); 
     } 
     }; 
     console.log(listener); 

     var ref = new Firebase("https://<YOUR_FIREBASE_APP>.firebaseio.com"); 
     ref.on("child_added", listener.onChildAdded, null, listener); 
    })(); 
    </script> 
</body> 
</html> 

預計:對象({ onChildAdded: function... }

結果:窗口(瀏覽器全局對象)

image.png

所以我解決了這個問題bind方法。

ref.on("child_added", listener.onChildAdded.bind(listener)); 

此問題是一個錯誤或規範?

+0

您正在使用哪個版本的Firebase? –

+0

我使用firebase 2.2.7。 –

回答

0

其實根據源代碼可選cancel回調應該是傳遞一個空的函數是第三個參數省略不提供null/undefined值。這可能不是從文檔中明顯的,但cancel是可選的

+0

謝謝!它當然很好,但沒有記錄。我認爲這是不合理和不友好的api。 –

0

我認爲問題是,如果是第三個參數爲空是不考慮第四PARAM所以儘量

ref.on("child_added", listener.onChildAdded, function(){}, listener); 
+0

謝謝!它當然很好,但沒有記錄。 我認爲這是不合理和不友好的API。 –