2017-03-05 65 views
0

我有这样的团队模式:EmberJS过滤器的hasMany数据,适用于属于关联关系

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

本播放器模型一起:

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

如果我要列出所有的球队,很容易的。如果我想列出所有球队,并在每支球队中列出所有球员......也很简单。

{{#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}} 

我的问题......让我们说某些球员受伤。如果我在队伍中循环,我将如何去展示只有队员受伤的球队。如果至少有一名球员受伤,则TEAM将显示,如果不是,球队将不会显示?

回答

1

过滤请看看this twiddle

+0

与数据库中,我有得到它的渲染问题提取数据。换句话说,如果我用所有关系加载记录,我需要保存记录(为了显示过滤结果)或在beforeModal中,加载另一个记录中有很多记录。有没有办法我可以稍后调用计算属性?或者其他一些手段? PS,谢谢你的喋喋不休......非常有帮助! – Matt

+0

@Matt我不明白是什么问题!如果你想基于播放器(关系)过滤团队,所以你隐式地加载关系的方式定义的烬数据。请获取有关您提到的问题的更多信息 –

+0

我在说的是,似乎过滤器在所有模型加载之前运行,因为所有模型数据都不存在,所以不显示内容。有没有一种方法可以在计算属性运行时延迟,或者告诉它等待所有模型首先加载? – Matt

2

您可以尝试使用isAny方法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'); 
      }) 
     }) 
    } 
})