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