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

时间:2014-09-03 16:21:07

标签: 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()函数时,我想指定一个处理程序,然后在我的代码中的一个地方执行所有处理,而不是必须使用{{内联函数来定义函数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"]的易于访问的值。

2 个答案:

答案 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