JSBin在这里:http://jsbin.com/IYiqifO/16/edit?html,js,output
我使用DS.FixturesAdapter中的固定装置设置了三个相关模型,并且我试图找出如何从组件中的父模型访问相关模型的属性。我的模板如下所示:
{{#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')
}
但是data [n] .responses始终是一个空数组。我该怎么做a)获取我的车把模板以填充响应数据;和b)使我的
data
对象具有正确填充的responses
数组? 最佳答案
您需要在Respondent
固定装置中传递响应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
属性中使用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
这是一个具有http://jsbin.com/IYiqifO/19/edit功能的jsbin
关于javascript - Ember 1.0,Ember Data beta 3:使用DS.FixturesAdapter获取相关模型数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19376730/