2014-09-03 25 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