2014-02-18 152 views
1

我正在使用AngularJS和Firebase製作實時應用程序。我正在存儲一系列數據(玩家)。 您可以在下面看到我的數據結構示例。Firebase從數組中獲取價值

enter image description here

我能得到這個特定遊戲的所有玩家,但是我如何才能例如玩家「測試」?關鍵是一個生成的值:

Game.find(gameId).child('/players/').push(player); 

後來我想,爲什麼不我只是「更新」 '/players/'+name和設置的名稱出現。但不幸的是,我又回到對象的對象中:

{ 
    players : { 
    "name":"...", 
    "test":"moretest" 
    } 
} 

我可以訪問這些屬性,但我不能遍歷它們,因爲它不是一個數組。

所以基本上我想要做的就是「明智地」讓玩家脫離陣列。

Game.find(gameId).child('/players/').where(name == ...); 

在此先感謝

編輯:

enter image description here

回答

3

你是正確的軌道上存儲的玩家僅僅是名稱,而不是使用push生成一個ID上。您需要確保您的球員名稱是唯一的,否則您可能無法容納兩名同名球員。

在火力地堡每個鍵必須有一個值,所以最好的方式來存儲的,你希望他們能夠訪問由玩家的名字是簡單地將它們設置爲像「真」的布爾值球員名單:

Game.find(gameId).child('/players').child(player).set(true); 
+0

感謝您的回答,請參閱我編輯的帖子。正如你所看到的,一名球員不僅僅包含名字。基本上我需要爲/ players集合中找到的第一個Player設置「turn」屬性爲true。但正如我所說,如果我去搜索所有的球員,它不會返回一個數組。它返回一個包含對象的對象。 ng-repeat不起作用,我不知道如何將第一個玩家的「turn」屬性設置爲true。 – Dieterg

+1

你當然可以對對象使用ng-repeat。在集合「'中使用'ng-repeat =」(key,value)。 – Anant

+0

謝謝,學到了新東西! :-) – Dieterg