如何从浅层检索任意Firebase子项?

时间:2013-07-18 19:41:26

标签: firebase

我有一个非规范化数据如下:

- 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.
    });

1 个答案:

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