说我有以下几点:

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",这使得无法在switch/case语句中区分两个引用!

我确定dataSnapshot在某处包含此信息,但是我还没有以任何方便的方式来发现它。在控制台中浏览dataSnapshot对象,我发现有一个名为path的对象埋在其中,该对象包含一个数组(使用上面的示例)(其中包括["firebase", "url", "A", "reference"]),但是没有简单的方法来访问它。

如果可以访问该数组,则可以重建URL或找到更方便的方法来处理switch/case语句。我认为完整的引用字符串将更适合作为dataSnapshot的易于访问的值。

最佳答案

要从Snapshot返回完整的URL,请执行以下操作:

snapshot.ref().toString()
toString部分有点违反直觉。我经常发现自己必须对其进行测试,以查看是否确实是这样。

如果还有一个更明确的getUrl方法提示,那将是很好的

更新:

使用最新的SDK版本 ref is no longer a function,因此您必须使用:
snapshot.ref.toString();

关于javascript - Firebase在dataSnapshot(javascript API)中获取引用URL的完整路径,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25649204/

10-11 13:01