2015-12-10 1 views
1

Problème:
Je veux essayer d'avoir plusieurs jeux en cours d'exécution à la racine de mon Firebase, ils ont tous Firebase généré ids,
quand je suis en train de chercher les utilisant le <firebase-collection> Je reçois toujours un tableau des objets, et la liaison bidirectionnelle est très dure avec Polymer.
Existe-t-il un moyen d'obtenir les données Firebase en tant qu'objet?Définition de valeurs d'un tableau de données Firebase en utilisant un polymère

J'ai essayé d'ajouter l'attribut data-as-object, mais cela n'a pas fonctionné, j'ai aussi obtenu un tableau.
J'ai même essayé d'utiliser l'élément <firebase-document> en changeant simplement le formulaire
<-collection> en <-document>, mais la mise à jour des données du jeu n'a pas poussé à la base de feu.
Je ne sais pas si c'est possible ...

Ou y a-t-il un moyen pour une bonne liaison bidirectionnelle?
Je ne peux pas utiliser l'index de l'élément du tableau, comme ceci: this.set('gameData.' + i), parce que je reçois l'erreur Uncaught Error: unexpected key 2, lorsque je tente de modifier les valeurs sous l'objet dans le tableau

code complet sur Github

Mon code:
fournisseur de données:

<firebase-collection location="https://***.firebaseio.com" 
        data="{{data}}" data-as-object log> 
</firebase-collection> 
<!-- script --> 
Polymer({ 
    is: 'tmp-game-data', 
    properties: { 
     data: { 
      notify: true 
     } 
     } 
}); 

Élément Jeu:

<!-- map with several players(Array), --> 
<!-- an player(Object) has some properties --> 
<!-- on-map-ready, when the map is fully configured --> 
<tmp-map players="{{game.players}}" 
     on-map-ready="_mapReadyCallback"> 
</tmp-map> 
<!-- menu user for creating and --> 
<!-- joining games with selected settings --> 
<tmp-menu on-start-global-game="startGlobalGame" 
      on-join-game="joinGame"> 
</tmp-menu> 
<tmp-game-data data="{{gamesData}}"></tmp-game-data> 
<!-- script --> 
var blocks = []; //Map blocks, global access 

Polymer({ 
    is: 'tmp-game', 

    properties: { 
     gamesData: { 
      notify: true 
     }, 
     game: { 
      notify: true 
     }, 
     gameId: { 
      type: String 
     } 
    }, 

    startGlobalGame: function(e) { 
     var gameId = getRandomString(6); 
     this.set('gameId', gameId); 

     var player = {id: /*playerId*/}; 
     var players = [player]; 

     this.push('gamesData', { 
      gameId: gameId, 
      maxPlayers: e.detail.maxPlayers, 
      players: players 
     }); 

     this.selectGame(); 

     //generate map 
    }, 

    joinGame: function(e) { 
     var gameId = e.detail.gameId; 
     for (var i = 0; i < this.gamesData.length; i++) { 
      if(this.gamesData[i].gameId === gameId) { 
       var map = this.get('gamesData.' + i + '.map'); 
       //generate map with the map of the game 
      } 
     } 
     this.selectGame(); 
    }, 

    selectGame: function() { 
     for (var i = 0; i < this.gamesData.length; i++) { 
      if(this.gamesData[i].gameId === this.gameId) { 
       this.set('game', this.gamesData[i]); 
       this.linkPaths('game', 'gamesData.' + i); 
      } 
     } 
    }, 

    _mapReadyCallback: function(e) { 
     for (var i = 0; i < this.gamesData.length; i++) { 
      if(this.gamesData[i].gameId === this.gameId) { 
       //get the map as a json 
       var map = JSON.stringify(blocks); 
       this.set('gamesData.' + i + '.map', map); 
      } 
     } 
    } 
}); 
+0

j'ai enlevé '', '' et '