2017-03-05 66 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'); 
      }) 
     }) 
    } 
})