您需要在Respondent
夹具中传递响应 ID:
App.Respondent.FIXTURES = [
id: 1
name: 'Ada Lovelace'
responses: [1,2]
,
id: 2
name: 'Grace Hopper'
responses: [3,4]
]
在此之后,您将收到一个错误:
断言失败:您在 '' 上查找了 'responses' 关系,但未加载某些关联记录。要么确保它们都与父记录一起加载,要么指定关系是异步的(DS.hasMany({ async: true })
)
就像消息中描述的那样,您需要async: true
在您的responses
财产中使用:
App.Respondent = DS.Model.extend
name: DS.attr('string')
responses: DS.hasMany('response', async: true )
在您的模板中,您将看到数据,但是在didInsertElement
调用它时,responses
不会加载关联。发生这种情况是因为模板具有绑定意识,但 didInsertElement 不是。因此,当responses
加载模板更新但不调用 didInsertElement 时。因为responses
关联返回一个promise,所以你可以在一个数组中获取所有响应,并使用它Ember.RSVP.all
来知道所有响应何时加载:
App.ShowRespondentsComponent = Ember.Component.extend
didInsertElement: ->
allResponses = []
@get('data').forEach (respondent) =>
allResponses.push respondent.get('responses')
Ember.RSVP.all(allResponses).then =>
@respondentLoaded()
respondentLoaded: ->
thisIsWhatIWant = @get('data').map (respondent) ->
{
name: respondent.get('name')
responses: respondent.get('responses').map (r) -> r.get('text')
}
console.log thisIsWhatIWant
这是一个具有此功能的 jsbin http://jsbin.com/IYiqifO/19/edit