2013-07-18 35 views
1

我有一个非规范化的数据如下:如何从浅层检索任意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: 

我想列出geohash/w22/qt4authorid, authorname, content所有值。但是我不知道孩子的名字是什么,或者究竟有多少人在这个层次上。

该代码应该如何枚举subchildren在这个浅层次?

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

回答

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

我创建了一个的jsfiddle与所描述的填充,以及那拉subchildren项出码数据为例火力地堡。请看看这里:http://jsfiddle.net/guy5n/1/

+0

谢谢你对我很清楚 – vzhen