2015-09-07 2 views
0

Je tente de construire une matrice interactive d'un calendrier sportif d'équipe où les rangées sont chaque équipe, et les colonnes sont chaque semaine. Il s'agit d'un pool de survivants où les utilisateurs ne sont autorisés à choisir qu'un gagnant par semaine et chaque équipe une seule fois par an. Par conséquent, lorsqu'un utilisateur clique sur un jeu donné, la colonne associée et doit être désactivée. Je suis nouveau à NoSQL, donc je ne suis pas sûr de savoir comment interagir avec les jeux par équipe et par semaine.Comment accéder aux mêmes données Firebase par deux index différents?

Sine J'utilise Firebase mon back-end, j'ai commencé avec une structure de fichier .json avec un $firebaseArray de teams chacun avec un schedule imbriqué comme ceci:

{ 
"teams": { 
"California": { 
    "slug": "california", 
    "chosen": false, 
    "schedule": [ 
    { 
     "week": 1, 
     "opponent": "Grambling St", 
     "selected": false, 
     "available": true 
    }, 
    { 
     "week": 2, 
     "opponent": "San Diego St", 
     "selected": false, 
     "available": true 
    }, 
    { 
     "week": 3, 
     "opponent": "at Texas", 
     "selected": false, 
     "available": true 
    }, 
    { 
     "week": 4, 
     "opponent": "at Washington", 
     "selected": false, 
     "available": true 
    }, 
    { 
     "week": 5, 
     "opponent": "Washington St", 
     "selected": false, 
     "available": true 
    }, 
    { 
     "week": 6, 
     "opponent": "at Utah", 
     "selected": false, 
     "available": true 
    }, 
    { 
     "week": 7, 
     "opponent": "Bye", 
     "selected": false, 
     "available": true 
    }, 
    { 
     "week": 8, 
     "opponent": "at UCLA", 
     "selected": false, 
     "available": true 
    }, 
    { 
     "week": 9, 
     "opponent": "USC", 
     "selected": false, 
     "available": true 
    }, 
    { 
     "week": 10, 
     "opponent": "at Oregon", 
     "selected": false, 
     "available": true 
    }, 
    { 
     "week": 11, 
     "opponent": "Oregon St", 
     "selected": false, 
     "available": true 
    }, 
    { 
     "week": 12, 
     "opponent": "at Stanford", 
     "selected": false, 
     "available": true 
    }, 
    { 
     "week": 13, 
     "opponent": "Arizona St", 
     "selected": false, 
     "available": true 
    } 
    ] 
}, 

"Oregon": { 
    "slug": "oregon", 
    "chosen": false, 
    "schedule": [ 
    { 
     "week": 1, 
     "opponent": "EWU", 
     "selected": false, 
     "available": true 
    }, 
    { 
     "week": 2, 
     "opponent": "at Michigan St", 
     "selected": false, 
     "available": true 
    }, 
    { 
     "week": 3, 
     "opponent": "Georgia St", 
     "selected": false, 
     "available": true 
    }, 
    { 
     "week": 4, 
     "opponent": "Utah", 
     "selected": false, 
     "available": true 
    }, 
    { 
     "week": 5, 
     "opponent": "at Colorado", 
     "selected": false, 
     "available": true 
    }, 
    { 
     "week": 6, 
     "opponent": "Washington St", 
     "selected": false, 
     "available": true 
    }, 
    { 
     "week": 7, 
     "opponent": "at Washington", 
     "selected": false, 
     "available": true 
    }, 
    { 
     "week": 8, 
     "opponent": "Bye", 
     "selected": false, 
     "available": true 
    }, 
    { 
     "week": 9, 
     "opponent": "at Arizona St", 
     "selected": false, 
     "available": true 
    }, 
    { 
     "week": 10, 
     "opponent": "California", 
     "selected": false, 
     "available": true 
    }, 
    { 
     "week": 11, 
     "opponent": "at Stanford", 
     "selected": false, 
     "available": true 
    }, 
    { 
     "week": 12, 
     "opponent": "USC", 
     "selected": false, 
     "available": true 
    }, 
    { 
     "week": 13, 
     "opponent": "Oregon St", 
     "selected": false, 
     "available": true 
    } 
    ] 
}, 

j'étais facilement en mesure de construire la table via un ng-repeat="team in teams" au niveau de la ligne et un autre game in team.schedule au niveau td. Définir le team.chosen associé à true marque la ligne inactive, mais je ne suis pas sûr de savoir comment faire la même chose par semaine (colonne).

========

j'ai décidé de donner un autre essai avec une structure de données différentes, cette fois briser le games sortir dans sa propre table séparée de teams comme ceci:

{ 
"teams": { 
"California": { 
    "chosen": false, 
    "slug": "california" 
}, 

"Oregon": { 
    "chosen": false, 
    "slug": "oregon" 
}, 

"Oregon St": { 
    "chosen": false, 
    "slug": "oregon-st" 
}, 

"Stanford": { 
    "chosen": false, 
    "slug": "stanford" 
}, 

"Washington": { 
    "chosen": false, 
    "slug": "washington" 
}, 

"Washington St": { 
    "chosen": false, 
    "slug": "washington-st" 
} 
}, 

"games": { 
"one": { 
    "Stanford": "at Northwestern", 
    "Washington": "at Boise St", 
    "California": "Grambling St", 
    "Oregon": "EWU", 
    "Oregon St": "Weber St", 
    "Washington St": "Portland St" 
}, 
"two": { 
    "Stanford": "UCF", 
    "Washington": "Sacramento St", 
    "California": "San Diego St", 
    "Oregon": "at Michigan St", 
    "Oregon St": "at Michigan", 
    "Washington": "at Rutgers" 
}, 
"three": { 
    "Stanford": "at USC", 
    "Washington": "Utah St", 
    "California": "at Texas", 
    "Oregon": "Georgia St", 
    "Oregon St": "San Jose St", 
    "Washington": "Wyoming" 
} 
} 
} 

Cela n'a pas fonctionné mieux car je ne suis pas capable d'atteindre la valeur de l'objet de jeu à l'intérieur d'un ng-repeat de weeks.

Je soupçonne qu'il me manque quelque chose structurant ces données dans Firebase. Toute aide est très appréciée.

Répondre

1

La partie aléatoire de ceci est la cellule de la matrice sur laquelle l'utilisateur clique (ce qu'il a choisi), alors pourquoi ne pas garder une trace de chaque choix. Les enfants seraient l'user_id de qui l'a choisi, la semaine # (colonne) et team_id (ligne).

Le pick_id_x serait un nom de noeud Firebase généré aléatoirement (childByAutoId) Avec cette structure

picks_node: 
    pick_id_0: 
     user: user_id 
     week: week # 
     team: team_id 
    pick_id_1: 
     user: user_id 
     week: week # 
     team: team_id 

vous pouvez interroger la semaine, l'équipe ou de l'utilisateur et tout ce qui apparaît dans le nœud choix aurait été bien, choisi, donc il ne pouvait pas être choisi à nouveau (vous résoudriez cela dans l'interface utilisateur). Vous remplissez donc les lignes et les colonnes matricielles à partir des données source, puis chargez cette liste de sélections et «bloquez» chaque semaine et chaque équipe.

Vous pouvez l'utiliser pour répondre aux questions «Je me demande quel utilisateur a choisi quelle équipe la semaine 3» ou «quelle équipe est la plus appréciée».

(j'ai utilisé team_id, mais il pourrait être jeu: game_id_x aussi bien si vous voulez conserver plus de données de jeu)

games_node: 
    game_id_0: 
    t1: home_team 
    t2: visiting_team 
    game_id_1: 
    t1: home_team 
    t2: visiting_team 

Notez que je dissocié les données de c'est la clé (nom de noeud, référence, quel que soit vous voulez l'appeler).

En général, pour Firebase: plus les données absolues sont bonnes et plus les données absolues ne sont pas figées.