Firebase在dataSnapshot(javascript API)中获取参考URL的完整路径

Man*_*ndM 9 javascript firebase

说我有以下内容:

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

当我定义我的.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);
Run Code Online (Sandbox Code Playgroud)

问题dataSnapshot.name()只会"reference"在两种情况下都返回,因此无法区分switch/case语句中的两个引用!

我确定在某个地方dataSnapshot包含这些信息,但我还没有以任何方便的方式发现它.探索控制台中的对象,我发现有一个埋藏在被调用内的对象,它包含(除其他外)一个数组,使用上面的例子,它将包含,但没有简单的方法来访问它.dataSnapshotpath["firebase", "url", "A", "reference"]

如果我有权访问该数组,我可以重建URL或找到一种更方便的方法来处理switch/case语句.我认为完整的参考字符串将更适合作为一个易于访问的值dataSnapshot.

Fra*_*len 23

要从一个Snapshot完整的URL返回,您可以:

snapshot.ref().toString()
Run Code Online (Sandbox Code Playgroud)

toString部分有点违反直觉.我经常发现自己不得不对它进行测试,看看是否真的要走了.

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

更新:

最近的SDK版本ref不再是一个功能,所以你必须使用:

snapshot.ref.toString();
Run Code Online (Sandbox Code Playgroud)

  • 记录了ref.toString()返回完整URL的事实:https://www.firebase.com/docs/web/api/firebase/tostring.html“获取与此Firebase引用位置相对应的绝对URL。 ” (2认同)
  • 如果你想要相对路径使用:`snapshot.ref.path.toString();` (2认同)