Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Ember 1.0,Ember Data beta 3:使用DS.FixturesAdapter获取相关模型数据_Javascript_Ember.js_Ember Data_Relationship - Fatal编程技术网

Javascript Ember 1.0,Ember Data beta 3:使用DS.FixturesAdapter获取相关模型数据

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

请点击这里:

我用DS.FixturesAdapter中的fixture设置了三个相关模型,我正试图找出如何从组件中的父模型访问相关模型的属性。我的模板如下所示:

{{#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,具有此功能

关于“确保它们都已加载”如何?这是可能的吗?如果我真的必须这样做,这是一个很好的论点,可以扔掉余烬数据,重新开始。