0

我有一个“关于”资源,其中嵌套了 about.philosophy 和 about.staff 路线。在 AboutRoute 中有一个重定向,因此当您单击导航上的“关于”链接时,应用程序将重定向到 about.philosophy。

Ew.AboutRoute = Ember.Route.extend({
  redirect: function(){
    this.transitionTo('about.philosophy');
  }
});

但是,如果您当前位于其中一个嵌套路由中并再次单击导航中的“关于”链接,而不是将您重定向到 about.philosophy,它会呈现“/about”,它没有模板,因此它已损坏页。

再次尝试输入 AboutRoute 后,为什么此重定向不起作用?

更新

Dan 的解决方案解决了这个问题,但也导致 subnav 损坏。我将具有 subnav 代码的 AboutRoute 更改为 AboutIndexRoute,并且 subnav 不再显示:

Ew.AboutIndexRoute = Ember.Route.extend({
  activate: function(){
    this.controllerFor('application').set('renderAboutSubNav', true);
  },
  deactivate: function(){
    this.controllerFor('application').set('renderAboutSubNav', false);
  },
  redirect: function(){
    this.transitionTo('about.philosophy');
  }
});

然后在 application.hbs 我有:

{{#if renderAboutSubNav}}
  {{render 'about/subnav'}}
{{/if}}
4

1 回答 1

3

我建议把你redirect放在一个AboutIndexRoute,这样它只会在用户结束/about而不是子路由时被调用。例如,您可能希望允许用户直接导航到/about/staff,并且您不希望在进入 的途中redirect被调用。AboutRouteAboutStaffRoute

顺便说一句,redirect现在不赞成使用afterModel钩子(尽管现在afterModel内部调用redirect)。

于 2013-09-23T02:45:50.590 回答