2014-10-28 68 views
0

我想渲染2个项目列表,这两个模板均为模型上的each将具有不同模型的模板渲染到Ember.js中的指定插座

我试着先渲染主模板,然后将嵌套模板渲染到主模板的某些命名插座上。

但是,当我试着给嵌套的人不同的模式(它们都使用不同的模型阵列),我得到一个错误:

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

下面是代码:

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

    this.render('roomlist',{ 
    'into':'homepage', 
    'outlet':'roomlist', 
    'model':this.store.find('room') 
    }); 

    this.render('activitylist',{ 
    'into':'homepage', 
    'outlet':'activitylist', 
    'model':this.store.find('activity') 
    }); 
} 

编辑:

我的替代想法是在this.set("rooms", this.store.find("room");之后在模型钩子中使用{{render "roomlist" rooms}}而不是renderTemplate-hook。但是,把它扔到了几乎同样的错误:

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

回答

1

您应该解决您将在model钩使用模型,然后你就可以在你的模板更容易使用:

是这样的:

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') 
    }); 
} 
+0

有没有办法在嵌套模板特定的控制器中加载模型?因为这些嵌套模板没有自己的路线,所以我尝试在主模板中加载他们的模型,但是这对我来说并不合适。 – 2014-10-28 20:08:34

+1

你可以尝试设置父控制器上的所有模型,然后在你的模板中执行'{{render'nested-controller'somemodel}}' – Asgaroth 2014-10-28 20:23:01