Ember-Data objectsAt()获取第一个结果不起作用

时间:2013-05-21 09:12:31

标签: javascript ember.js ember-data

我正在使用数据填充两个模板:第一个模板包含有关模型的详细信息(称为Slider),第二个模板包含最后5个滑块的列表。

问题是当我在结果上使用objectAt(0)时,模型没有正确应用于模板。列表的另一个模板将被填充。我的意思是:

App.IndexRoute = Ember.Route.extend({
  setupController: function() {
    var sliders = App.Slider.find({ limit: 5 });

    this.controllerFor('indexSlider').set('model', sliders.objectAt(0));
    this.controllerFor('indexSliders').set('model', sliders); // this works fine and loads the data into the template
  }
});

该代码不起作用。但是,当我用这个替换indexSlider模型时它确实有效:

App.IndexRoute = Ember.Route.extend({
  setupController: function() {
    var sliders = App.Slider.find({ limit: 5 });

    this.controllerFor('indexSlider').set('model', App.Slider.find(52));
    this.controllerFor('indexSliders').set('model', sliders);
  }
});

...其中52是第一个结果的ID。这让我觉得objectAt在模板上渲染模型时不能正常工作,或者我只是做错了?

1 个答案:

答案 0 :(得分:4)

在尝试访问第一个对象之前,您需要等待加载find。您可以使用didLoad事件:

App.IndexRoute = Ember.Route.extend({
  setupController: function() {
    var sliders = App.Slider.find({ limit: 5 });
    sliders.one('didLoad', this, function() {
      this.controllerFor('indexSlider').set('model', sliders.objectAt(0));
    });
    this.controllerFor('indexSliders').set('model', sliders);
  }
});