Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript EmberJS:检索多个模型时从路由检索模型_Javascript_Ember.js - Fatal编程技术网

Javascript EmberJS:检索多个模型时从路由检索模型

Javascript EmberJS:检索多个模型时从路由检索模型,javascript,ember.js,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模型中的第一个对象,以便进行下面将显示的转换。我

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

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
的多个实例)

也可能是我没有正确设计我的应用程序<代码>站点在本例中,我构建了一个组件,在几个不同的控制器中显示不同的站点。控制器依赖于此组件,因为它们需要知道选择了哪个站点才能执行自己的操作。因此,在需要访问组件的控制器中,我执行以下操作:

{{site-nav sites=sites}}

其中
站点导航
是我的组件。它需要自己的模型,就像控制器本身一样。

首先,您需要稍微修改模型挂钩,以确保保持在正确的范围内:

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:function(models){
    var site = models.sites.get('firstObject');
    this.transitionTo('site',site);
}
afterModel
提供了两个参数,第一个是路线的解析模型,因此您可以这样做:

setupController:function(controller,models) {
    controller.set('sites',models.sites);
    controller.set('songs',models.songs);
}
afterModel:function(models){
    var site = models.sites.get('firstObject');
    this.transitionTo('site',site);
}

我相信我在这里将一个null对象传递给transitionon()。尝试了您的解决方案,并在ember console中看到了这一点:加载路由时出错:TypeError:undefined不是一个函数尝试将其记录到控制台并查看结果。是的-尝试了这一点。log(“模型:”+models.get('sites').get('firstObject'));没有任何结果。基本上,
models.get('sites')
在afterModel()中调用时未定义。请尝试
console.log(models.sites)