EmberJS:检索多个模型时从路径检索模型

时间:2014-04-28 02:23:46

标签: javascript ember.js

我有一条路线有两个与之相关的模型,如下所示:

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是我的组件。它需要自己的模型,控制器本身也是如此。

1 个答案:

答案 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);
}