2014-09-03 26 views
6

說我有以下幾點:火力地堡獲得的dataSnapshot(JavaScript的API)參考網址全路徑

var firebaseARef = new Firebase("http://this.is.my/firebase/url/A/reference") 
var firebaseBRef = new Firebase("http://this.is.my/firebase/url/B/reference") 

當我定義我.on()功能,我想指定一個處理程序,然後盡一切在我的代碼中的一個地方處理,而不是必須定義與.on()定義內聯的功能。爲了說明:

var handleAllFirebaseStuff = function(dataSnapshot){ 
    var name = dataSnapshot.name(); //PROBLEM HERE: returns "reference", no way to distinguish! 
    switch(name){ 
     case "http://this.is.my/firebase/url/A/reference": //How do I get this full reference from dataSnapshot? 
      /* do stuff for A reference */ 
     case "http://this.is.my/firebase/url/B/reference": //How do I get this full reference from dataSnapshot? 
      /* do stuff for B reference */ 
     default: 
      break; 
    } 
} 

firebaseARef.on('value', handleAllFirebaseStuff); 
firebaseBRef.on('value', handleAllFirebaseStuff); 

的問題是dataSnapshot.name()只會在兩種情況下返回"reference",因此不可能在開關/ case語句中的兩個引用來區分!

我敢肯定dataSnapshot包含此信息某處,但我還沒有以任何方便的方式發現它。在控制檯中探索dataSnapshot對象,我發現有一個對象被埋在被稱爲path的對象中,該對象包含(除其他之外)使用上面的示例的數組,其中包含["firebase", "url", "A", "reference"],但沒有簡單的方法來訪問它。

如果我有權訪問該數組,我可以重建URL或找到更方便的方式來處理switch/case語句。我認爲從dataSnapshot可以得到一個完整的參考字符串作爲易於訪問的值。

+0

您是否在尋找'snapshot.ref()。toString()'? – 2014-09-03 19:49:13

+0

就是這樣!在Firebase的JavaScript API中記錄這些信息將非常有幫助!如果你想提供答案,我會很樂意接受它... – MandM 2014-09-03 20:48:01

回答

16

要獲得從Snapshot回完整的URL,你這樣做:

snapshot.ref().toString() 

toString部分是有點反直覺。我經常發現自己不得不測試它,看看這是否是真的。

提示這將是很好,如果有也是一個比較明確的getUrl方法提示

UPDATE:

隨着最近SDK版本ref is no longer a function,所以你必須使用:

snapshot.ref.toString(); 
+0

是的! 「DataSnapshot.ref()」的API文檔全部是「生成此DataSnapshot的位置的Firebase參考」。這裏顯然更多(即.ref()。toString()) - 讓我們看看更多的文檔! (或更有幫助的顯式方法_hint提示) – MandM 2014-09-04 13:58:44

+0

另外,我很高興toString()能夠工作,但它是一個未記錄的方法,有點嚇到我 - 如果方法在Firebase轉換之間的功能上完全改變了會怎麼樣? (不保證它不會!)所以,我同意你的陳述關於明確的方法全心全意 - Firebase oughta繼續前進。 – MandM 2014-09-04 14:00:55

+0

記錄了ref.toString()返回完整URL的事實:https://www.firebase.com/docs/web/api/firebase/tostring.html「獲取與此Firebase參考的位置相對應的絕對URL 「。 – 2014-09-04 14:19:35