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