Javascript Ember 1.0,Ember Data beta 3:使用DS.FixturesAdapter获取相关模型数据
请点击这里: 我用DS.FixturesAdapter中的fixture设置了三个相关模型,我正试图找出如何从组件中的父模型访问相关模型的属性。我的模板如下所示:Javascript Ember 1.0,Ember Data beta 3:使用DS.FixturesAdapter获取相关模型数据,javascript,ember.js,ember-data,relationship,Javascript,Ember.js,Ember Data,Relationship,请点击这里: 我用DS.FixturesAdapter中的fixture设置了三个相关模型,我正试图找出如何从组件中的父模型访问相关模型的属性。我的模板如下所示: {{#each data}} <li> <h3>{{name}}</h3> {{#each responses}} {{text}}<br /> {{/each}} </li> {{/each}} data = @get('dat
{{#each data}}
<li>
<h3>{{name}}</h3>
{{#each responses}}
{{text}}<br />
{{/each}}
</li>
{{/each}}
data = @get('data').map (respondent) ->
{
name: respondent.get('name')
responses: respondent.get('responses').map (r) -> r.get('text')
}
但是数据[n]。响应始终是空数组。我需要做什么才能a)让我的车把模板填充响应数据;b)获取我的
数据
对象以正确填充响应
数组?您需要在响应者
夹具中传递响应ID:
App.Respondent.FIXTURES = [
id: 1
name: 'Ada Lovelace'
responses: [1,2]
,
id: 2
name: 'Grace Hopper'
responses: [3,4]
]
在此之后,您将收到一个错误:
断言失败:您在上查找了“响应”关系
“”但某些关联的记录被删除
没有加载。或者确保它们都与
父记录,或指定关系是异步的
(DS.hasMany({async:true})
)
如消息所述,您需要在响应
属性中使用async:true
:
App.Respondent = DS.Model.extend
name: DS.attr('string')
responses: DS.hasMany('response', async: true )
在模板中,您将看到数据,但在调用didInsertElement
时,不会加载responses
关联。之所以会发生这种情况,是因为模板可以识别绑定,但didInsertElement不能识别。因此,当加载响应时,模板会更新,但不会调用didInsertElement。由于responses
关联返回一个承诺,因此您可以获取数组中的所有响应,并使用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,具有此功能关于“确保它们都已加载”如何?这是可能的吗?如果我真的必须这样做,这是一个很好的论点,可以扔掉余烬数据,重新开始。