2015-03-30 62 views
0

所有成员细节有了这样的数据:获得的每间客房

{ 
    "rooms": { 
     "one": { 
     "name": "room alpha", 
     "type": "private" 
     }, 
     "two": { ... }, 
     "three": { ... } 
    }, 

    "members": { 
     "one": { 
     "mchen": true, 
     "hmadi": true 
     }, 
     "two": { ... }, 
     "three": { ... } 
    }, 

    ... 

我如何可以查询所有客房都以(举例)的每名成员 的用户名?

EDIT2:

我试图把玩家的游戏和玩家加载游戏,这是加载了相关选手进行游戏的解决方案。但我只能得到玩家的ID,我需要用户名或者个人资料图片url。

enter image description here

你看,玩家仅通过其ID显示,因为我救了它这样: this.root.child('games').child(gameID).child('players').child(this.currentUser.id).set(true);

,但是当我得到的游戏:

this.root.child('games').on('value', function(snapshot) { 
    console.log(snapshot.val()); 
}); 

我只得到了玩家当然是id。我如何获得游戏玩家的详细信息。

+0

如果你想加载所有房间的所有成员,我可能会简单地加载整个数据树高一级。但我的感受并不是你想要的。你可以编辑*你的问题(使用正确的编辑链接),并澄清你想要完成什么以及你已经尝试了什么? – 2015-03-31 02:35:26

+0

我已经编辑更详细的答案 – user2579150 2015-03-31 17:19:51

+0

你已经尝试过什么吗?如果是这样,请发布您尝试的内容(请参阅http://stackoverflow.com/help/mcve)。这也会解决许多缺失的信息,例如:您的目标环境是什么。 – 2015-03-31 17:35:04

回答

0

您正在寻找加载所有游戏的玩家,当这些游戏加载。例如:

this.root.child('games').on('value', function(gamesSnapshot) { 
    console.log(gamesSnapshot.val()); 
    var loadedPlayers = {}; 
    gamesSnapshot.forEach(function(gameSnapshot) { 
    var game = gameSnapshot.val(); 
    Object.keys(game.players).forEach(function(playerId) { 
     if (Object.keys(loadedPlayers).indexOf(playerId) == -1) { 
     this.root.child('players').child(playerId).once(function('value', function(playerSnapshot) { 
      loadedPlayers[playerId] = playerSnapshot.val(); 
     }); 
     } 
    }); 
    }); 
}); 

所以这个代码非常蛮力加载所有游戏中的所有玩家。

尽管在很多情况下它可能运行良好,但您应该始终考虑是否不如更好地组织您的数据,使其更符合应用程序的需求。例如:不是加载整个玩家,您也可以将每个玩家需要显示的数据存储在他们参与的游戏中。所以如果你需要显示玩家的名字:

games 
    -J436712379 
    creator: 'ismaelaa' 
    players 
     simplelogin:35: 'Frank van Puffelen'