恢复ApplicationRoute上的插座集中的内容

时间:2015-01-08 14:50:36

标签: ember.js

我有一个应用程序路由,将模板呈现为名为“sidebar”的插座,这应该可以在整个应用程序中查看。我已经设置了一个快速示例here

当我进入其中一条路线时(在我的示例中,颜色路线),此插座将呈现不同的模板,当您导航到应用中的另一条路线时,它应显示最初在那里的侧边栏。

这不会自动发生,我理解这是因为一旦输入ApplciationRoute,首次加载应用程序时,renderTemplate将被调用,并且在页面刷新之前不会再次调用。这对我来说很有意义,但我不确定如何解决这个问题。

我尝试在Route#render的{​​{1}}操作下再次重新调用willTransition方法,但它不起作用。

ColorRoute

2 个答案:

答案 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