说我有以下内容:
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在某个地方包含这些信息,但我还没有以任何方便的方式发现它.在控制台中探索dataSnapshotobject,我发现有一个隐藏在被调用路径中的对象,其中包含(除其他外)一个数组,使用上面的例子,它将包含[“firebase”,“url”,“A”,“引用“],但没有简单的方法来访问它.
如果我有权访问该数组,我可以重建URL或找到一种更方便的方法来处理switch / case语句.我认为完整的参考字符串更适合作为dataSnapshot中易于访问的值.
解决方法
要从快照返回到完整URL,您可以:
snapshot.ref().toString()
toString部分有点违反直觉.我经常发现自己不得不对它进行测试,看看是否真的要走了.
更新:
最近的SDK版本为ref
is no longer a function,因此您必须使用:
snapshot.ref.toString();
原文地址:https://www.jb51.cc/js/156014.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。