说我有以下内容:
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()
函数时,我想指定一个处理程序,然后在我的代码中的一个地方执行所有处理,而不是必须使用{{内联函数来定义函数1}}定义。举例说明:
.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()
,因此无法区分switch / case语句中的两个引用!
我确定"reference"
包含某处的信息,但我还没有以任何方便的方式发现它。探索控制台中的dataSnapshot
对象,我发现有一个隐藏在被调用dataSnapshot
内的对象,其中包含(除其他外)一个数组,使用上面的示例,其中包含path
,但没有简单的方法来访问它。
如果我有权访问该数组,我可以重建URL或找到一种更方便的方法来处理switch / case语句。我认为完整的参考字符串更适合作为["firebase", "url", "A", "reference"]
的易于访问的值。
答案 0 :(得分:21)
要从Snapshot
返回到完整网址,请执行以下操作:
snapshot.ref().toString()
toString
部分有点违反直觉。我经常发现自己必须对它进行测试,看看是否真的要走了。
提示如果还有一个更明确的getUrl
方法提示
使用最新的SDK版本ref
is no longer a function,您必须使用:
snapshot.ref.toString();
答案 1 :(得分:0)
请注意
snapshot.ref.toString();
为您提供包括主机在内的完整路径
https://your-app.firebaseio.com/something/213123/535235
如果要相对于数据库的路径,则应使用此
snapshot.ref.path.toString();
如果会给您/something/213123/535235