我有一条路线有两个与之相关的模型,如下所示:
App.IndexRoute = Ember.Route.extend({
model: function() {
return Ember.RSVP.hash({
sites: this.store.find('site'),
songs: this.store.find('song')
})
},
现在稍后,我需要能够检索sites
模型中的第一个对象,以便进行下面的转换。我想我可以使用setupController
来设置模型,但是当处理上面描述的多个模型时,我不确定如何填写此部分:
setupController: function(controller, ???) {
controller.set('model1', ???);
controller.set('model2', ???);
}
最后,我希望能够检索到model1中的第一个对象(它是site
的多个实例,如上所述)
afterModel: function() {
firstRecord = this.('sites').objectAt(0);
this.transitionTo('site', firstRecord.id);
}
我也可能没有正确设计我的应用程序。在这种情况下,sites
是我构建的一个组件,它在几个不同的控制器中显示不同的站点。控制器依赖于该组件,因为他们需要知道选择哪个站点才能完成自己的工作。因此,在需要访问组件的控制器中,我执行以下操作:
{{site-nav sites=sites}}
site-nav
是我的组件。它需要自己的模型,控制器本身也是如此。
答案 0 :(得分:2)
首先,您需要稍微修改模型钩子,以确保您保持在正确的范围内:
model:function(){
var self = this;
return Ember.RSVP.hash({
sites: self.store.find('site'),
songs: self.store.find('song')
})
}
要在setupController
中获取不同的模型,您只需从第二个参数访问它,如下所示:
setupController:function(controller,models) {
controller.set('sites',models.sites);
controller.set('songs',models.songs);
}
afterModel
提供了两个参数,首先是您路线的已解决模型,因此您可以这样做:
afterModel:function(models){
var site = models.sites.get('firstObject');
this.transitionTo('site',site);
}