Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Firebase获取dataSnapshot(javascript API)中引用URL的完整路径_Javascript_Firebase - Fatal编程技术网

Firebase获取dataSnapshot(javascript API)中引用URL的完整路径

Firebase获取dataSnapshot(javascript API)中引用URL的完整路径,javascript,firebase,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") 在定义.on()函数时,我希望指定一个处理程序,然后在代码中的一个位置执行所有处理,而不必使用.on()定义内联定义函数。举例说明: var handleAllFir

假设我有以下几点:

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

轻松访问的值。要从
快照
返回完整的URL,请执行以下操作:

snapshot.ref().toString()
toString
部分有点违反直觉。我经常发现自己不得不测试它,看看这是否真的是一条路要走

提示如果还有更明确的
getUrl
方法提示就好了

更新: 使用最新的SDK版本,因此您必须使用:

snapshot.ref.toString();
注意

snapshot.ref.toString();
提供包括主机在内的完整路径,如下所示

https://your-app.firebaseio.com/something/213123/535235
如果需要相对于数据库的路径,应该使用

snapshot.ref.path.toString();

if将给你
/something/213123/535235

你在找
snapshot.ref().toString()
?就是这个!将其记录在Firebase的Javascript API中将非常有用!如果你愿意提供答案,我很乐意接受……是的!
DataSnapshot.ref()
的API文档全部是“生成此DataSnapshot的位置的Firebase引用”。这里显然隐藏了更多的内容(例如,.ref().toString())--让我们看看更多的文档!(或者更有用的显式方法提示)另外,我很高兴toString()能够工作,但它是一个未记录的方法,这让我有点害怕——如果该方法在Firebase版本之间的功能完全改变了怎么办?(不能保证不会!)因此,我完全同意你关于显式方法的说法-Firebase应该继续。
ref.toString()
返回完整URL的事实被记录在案:“获取与此Firebase引用位置相对应的绝对URL。”如果需要相对路径,请使用:
snapshot.ref.path.toString()