Ember重定向仅在您第一次进入路线时触发

时间:2013-09-22 23:58:26

标签: javascript ember.js

我有一个'about'资源,其中包含about.philosophy和about.staff路由。在AboutRoute中有一个重定向,这样当你点击导航上的'about'链接时,app会重定向到about.philosophy。

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

但是,如果您当前位于其中一个嵌套路线中并再次单击导航中的“关于”链接,而不是将您重定向到about.philosophy,则会呈现'/ about',这样就没有模板它是一个破碎的页面。

尝试再次输入AboutRoute后,此重定向怎么办?

更新

Dan的解决方案解决了这个问题,但它也导致了一个破坏的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}}

1 个答案:

答案 0 :(得分:3)

我建议您将redirect放在AboutIndexRoute上,这样只有当用户最终在/about而不是子路线时才会调用它。例如,您可能希望允许用户直接导航到/about/staff,并且您不希望调用redirect,因为AboutRoute是在{{1}的路上输入的}}

顺便说一下,AboutStaffRoute现已弃用,而不是redirect挂钩(尽管afterModel现在内部调用afterModel