余烬重定向仅在您第一次进入路由时触发

Ember redirect only firing the first time you enter the route

本文关键字:路由 第一次 重定向 余烬      更新时间:2023-09-26

我有一个"关于"资源,它下面嵌套了about.philosophy和about.staff路由。在AboutRoute中有一个重定向,因此当您单击导航上的"关于"链接时,应用程序会重定向到about.philosophy。

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

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

为什么在您尝试第二次输入 AboutRoute 后此重定向不起作用?

更新

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

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

然后在应用程序.hbs中,我有:

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

我建议将redirect放在AboutIndexRoute上,以便仅在用户最终到达/about而不是子路由时才调用它。例如,您可能希望允许用户直接导航到/about/staff,并且您不希望在前往AboutStaffRoute的途中输入AboutRoute时调用redirect

顺便说一下,redirect现在已被弃用,取而代之的是afterModel钩子(尽管afterModel现在在内部调用redirect)。