我在application.hbs
有一个名为' sidebar'的插座。此插座用于某些路线,使用名为' sidebar-info'的组件呈现其他信息。在这些路线中,我使用renderTemplate
在适当的出口处渲染东西。例如:
renderTemplate: function(controller, model) {
this.render('components/sidebar-info', {
into: 'application',
outlet: 'sidebar',
model: Ember.Object.create({
title: this.get('i18n').t('signup'),
detailsComponent: 'signup-help'
})
});
this.render('sign-up');
},
这是components/sidebar-info
模板:
<div class="title">
<h1>{{model.title}}</h1>
</div>
{{#if model.detailsComponent}}
<div class="details">
{{component model.detailsComponent}}
</div>
{{/if}}
当渲染路径模板(而不是组件1)时,路由定义的模型将被发送到组件的模型覆盖。如果原始模型是这样的:
original_model = {
field_1: 1,
field_2: 2
}
然后在model.field_1
可用的情况下,在模板的上下文中使用model.title
未定义。
为什么要覆盖模型?
我使用的是Ember 2.2.0
答案 0 :(得分:1)
这似乎是正确的行为。根据{{3}},这是发送到render方法的控制器和模型选项的解释:
控制器 [String | Object]
用于此模板的控制器,由名称引用或作为 控制器实例。默认为Route的配对控制器
模型 [对象]
要在
options.controller
上设置的模型对象。默认为 Route的模型钩子的返回值
这意味着设置仅模型选项会在路由的配对控制器上设置模型,因为是默认 option.controller
。这意味着我们需要创建一个仅用于接收模型的虚拟控制器。
我已对此进行了测试,并且按预期工作。