1

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

- 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, contentunder的所有值geohash/w22/qt4。但我不提前知道孩子的名字是什么,或者在层次结构中到底有多少人。

在这个浅层枚举子子项的代码应该是什么样的?

    var fooRef = new Firebase('firebaseRef/geohash/w22/qt4');
    fooRef.on('child_added', function(snapshot) {  
      //Need help here.
    });
4

1 回答 1

1

当您需要在较浅的层次上掌握孩子并且您事先不知道键名时,您可以使用DataSnapshot.forEach()枚举。或者,您可以通过DataSnapshot.val()使用普通 JS 对象/键枚举来获取父级的 JS 对象并针对原始对象进行枚举;另请参阅:如何列出 javascript 对象的属性

因此,要填写您的示例,它将如下所示:

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/

于 2013-07-18T21:18:37.287 回答