我有一个非规范化数据如下:
- geohash
- w22
- qt4
- vhy
- e1c
- IzjfhqsUhJU_XQSBGTv
- authorid:
- authorname:
- content:
-Izjv10JcaS7fae6dmqb
- authorid:
- authorname:
- content:
- vhz
- erc
-Izjv10JcaS7fae6dmqb
- authorid:
- authorname:
- content:
- z99
- qt4
- abd
- 4g5
-Izjv10JcaS7fae6dmqb
- authorid:
- authorname:
- content:
我想在authorid, authorname, content
下列出geohash/w22/qt4
的所有值。但是我不知道孩子们的名字是什么,或者确切地知道层次结构中有多少人在这个级别。
在这个浅层次上,代码应该是什么样子来枚举子节点?
var fooRef = new Firebase('firebaseRef/geohash/w22/qt4');
fooRef.on('child_added', function(snapshot) {
//Need help here.
});
答案 0 :(得分:1)
如果您需要在浅层操作孩子并且您不知道关键名称,则可以使用DataSnapshot.forEach()
进行枚举。或者,您可以通过DataSnapshot.val()
在父级别获取JS对象,并使用普通的JS对象/密钥枚举枚举原始对象;另见:How to list the properties of a javascript object。
所以,为了填写你的例子,它看起来像这样:
var fooRef = new Firebase('firebaseRef/geohash/w22/qt4');
fooRef.on('child_added', function f(snapshot) {
snapshot.forEach(function(level1) {
level1.forEach(function(level2) {
var entry = level2.val(); // contains the JS object with authorid, authorname, ...
var pathToEntry = snapshot.name() + "/" + level1.name() + "/" + level2.name(); // contains the path with the unknown children names
});
});
});
我创建了一个带有示例Firebase的JSFiddle,其中包含所述的数据填充,以及用于提取子子项的代码。请看一下:http://jsfiddle.net/guy5n/1/