2017-03-05 1 views
0

J'ai ce modèle équipes:EmberJS données hasMany filtre, appliquer à la relation belongsTo

export default DS.Model.extend({ 
    "name": attr('string'), 
    "players": DS.hasMany('player',{ 
     async: true 
    }) 
}); 

avec ce modèle de joueur:

export default DS.Model.extend({ 
    "name": attr('string'), 
    "status": attr('string'), 
    "team": DS.belongsTo('team',{ 
     async: true 
    }) 
}); 

Si je veux énumérer toutes les équipes, assez facile . Et si je veux énumérer toutes les équipes, et au sein de chaque équipe, énumérer tous les joueurs ... aussi simple que cela.

{{#each teams as |team index|}} 
    <strong>{{team.name}}</strong></br> 
    <em>Players</em> 
    <ul> 
    {{#each team.players as |player|}} 
     <li>{{player.name}} - {{player.status}}</li> 
    {{/each}} 
    </ul> 
{{/each}} 

Ma question ... disons que certains joueurs sont blessés. Si je parcours les équipes, comment ferais-je SEULEMENT pour afficher les équipes qui ont blessé des joueurs? Si au moins un joueur est blessé, le TEAM s'affichera, sinon ... l'équipe ne s'affichera pas?

Répondre

1

S'il vous plaît jetez un oeil à this twiddle

+0

avec l'extraction de données à partir d'une base de données, je vais avoir un problème à se rendre. En d'autres termes, si je charge l'enregistrement avec toutes les relations, je dois soit enregistrer l'enregistrement (pour qu'il affiche les résultats filtrés), soit dans un beforeModal, charger dans l'autre a plusieurs enregistrements. Y at-il un moyen que je puisse appeler la propriété calculée plus tard? ou d'autres moyens? PS, merci pour le twiddle ... très utile! – Matt

+0

@Matt Je ne comprends pas quel est le problème! Si vous voulez filtrer l'équipe en fonction du joueur (relation), vous chargez implicitement la relation dans la façon dont les données de braise sont définies. S'il vous plaît obtenir plus d'informations sur le problème que vous avez mentionné –

+0

Ce que je dis est, il semble que le filtre fonctionne avant le chargement de tous les modèles, puisque toutes les données du modèle ne sont pas là, il n'affiche pas le contenu. Est-il possible de retarder l'exécution de la propriété calculée ou d'attendre que tous les modèles soient chargés en premier? – Matt

2

Vous pouvez filtrer en utilisant la méthode isAny pour players

export default Ember.Route.extend({ 
    model() { 
     return this.store.findAll('team').then((teams)=>{ 
      return teams.get('players').then((players) => { 
       return players.isAny('status','injured'); 
      }) 
     }) 
    } 
})