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);
}
}
}
});
j'ai enlevé '', '' et '