3

我正在用数据填充两个模板:第一个模板包含有关模型的详细信息(称为 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 在模板上渲染模型时并不能正常工作,还是我做错了?

4

1 回答 1

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);
  }
});
于 2013-05-21T11:09:01.677 回答