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, contentの下のすべての値をリストしたい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()、列挙に使用できます。または、通常の JS オブジェクト/キー列挙を使用して、親レベルで JS オブジェクトを取得DataSnapshot.val()し、生のオブジェクトに対して列挙することができます。参照: 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 に答える