Javascript 将具有不同模型的模板渲染到Ember.js中的命名插座中

Javascript 将具有不同模型的模板渲染到Ember.js中的命名插座中,javascript,ember.js,ember-data,Javascript,Ember.js,Ember Data,我想呈现两个项目列表,两个模板都在模型上每个 我尝试先渲染主模板,然后将嵌套的模板渲染到主模板的一些命名输出中,这是可行的 但是,当我尝试为嵌套对象提供不同的模型(它们都使用不同的模型数组)时,我得到了一个错误: The value that #each loops over must be an Array. You passed '<DS.PromiseArray:ember451>' (wrapped in (generated homepage controller))

我想呈现两个项目列表,两个模板都在模型上
每个

我尝试先渲染主模板,然后将嵌套的模板渲染到主模板的一些命名输出中,这是可行的

但是,当我尝试为嵌套对象提供不同的模型(它们都使用不同的模型数组)时,我得到了一个错误:

 The value that #each loops over must be an Array.
 You passed '<DS.PromiseArray:ember451>' (wrapped in (generated homepage controller))
编辑:

我的另一个想法是,在模型钩子中的this.set(“rooms”,this.store.find(“rooms”);之后使用
{render“roomlist”rooms}}
,而不是renderTemplate钩子。但它抛出了几乎相同的错误:

The value that #each loops over must be an Array.
You passed (generated roomlist controller) 

您应该解析将在
model
hook中使用的模型,然后您可以更轻松地在模板中使用它们:

大概是这样的:

model: function() {
  return Ember.RSVP.hash({
    rooms: this.store.find('room'),
    activities: this.store.find('activity')
  });
},
setupController: function(controller, model) {
  this.set('rooms', model.rooms);
  this.set('activities', model.activities);

  controller.set('model', model.rooms);
},

renderTemplate: function(){
  this.render('homepage');

  this.render('roomlist',{
    'into':'homepage',
    'outlet':'roomlist',
    'model':this.get('rooms')
  });

  this.render('activitylist',{
    'into':'homepage',
    'outlet':'activitylist',
    'model':this.get('activities')
  });
}

有没有办法在嵌套的特定于模板的控制器中加载模型?由于这些嵌套模板没有自己的路由,我尝试在主模板中加载它们的模型,但我觉得这不对。您可以尝试在父控制器上设置所有模型,然后在模板中执行
{{呈现“嵌套控制器”somemodel}
model: function() {
  return Ember.RSVP.hash({
    rooms: this.store.find('room'),
    activities: this.store.find('activity')
  });
},
setupController: function(controller, model) {
  this.set('rooms', model.rooms);
  this.set('activities', model.activities);

  controller.set('model', model.rooms);
},

renderTemplate: function(){
  this.render('homepage');

  this.render('roomlist',{
    'into':'homepage',
    'outlet':'roomlist',
    'model':this.get('rooms')
  });

  this.render('activitylist',{
    'into':'homepage',
    'outlet':'activitylist',
    'model':this.get('activities')
  });
}