我有一个应用程序路由,将模板呈现为名为“sidebar”的插座,这应该可以在整个应用程序中查看。我已经设置了一个快速示例here。
当我进入其中一条路线时(在我的示例中,颜色路线),此插座将呈现不同的模板,当您导航到应用中的另一条路线时,它应显示最初在那里的侧边栏。
这不会自动发生,我理解这是因为一旦输入ApplciationRoute
,首次加载应用程序时,renderTemplate
将被调用,并且在页面刷新之前不会再次调用。这对我来说很有意义,但我不确定如何解决这个问题。
我尝试在Route#render
的{{1}}操作下再次重新调用willTransition
方法,但它不起作用。
ColorRoute
答案 0 :(得分:1)
有人显然写了一个ember-cli插件来解决这个问题
请参阅以下SO回答Ember sidebar - returning from "admin" sidebar to "normal"
答案 1 :(得分:1)
我刚刚使用组件而不是命名插座想出了另一个“解决方法”。
而不是{{ outlet "sidebar" }}
模板中的application
,而只使用{{ x-sidebar }}
然后,按如下方式定义x-sidebar
组件模板:
<script type="text/x-handlebars" id="components/x-sidebar">
{{partial sidebar }}
</script>
因此,现在您新创建的组件需要sidebar
属性来告诉它要显示哪个模板。
您可以在使用组件时传递该属性:
{{ x-sidebar sidebar=sidebar }}
然后,您可以在路由中使用activate/deactivate
挂钩在sidebar
控制器上设置application
属性,例如:
App.ColorRoute = Ember.Route.extend({
model: function(params) {
return params.color;
},
activate: function(){
this.controllerFor('application').set('sidebar', 'color/sidebar');
},
deactivate: function(){
this.controllerFor('application').set('sidebar', 'sidebar');
}
});
工作解决方案here