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

标签 javascript ember.js

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

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

但是,如果您当前位于其中一个嵌套路线内并再次单击导航中的“about”链接,它不会将您重定向到 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');
  }
});

然后在 application.hbs 中我有:

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

最佳答案

我建议将您的 redirect 放在 AboutIndexRoute 上,这样只有当用户到达 /about 时才会调用它而不是子路线。例如,您可能希望允许用户直接导航到 /about/staff,并且您不希望将 redirect 作为 AboutRoute 调用code> 在前往 AboutStaffRoute 的途中输入。

顺便说一句,redirect 现在已被弃用,取而代之的是 afterModel Hook (尽管 afterModel 内部调用 redirect) > 暂时)。

关于javascript - Ember 重定向仅在您第一次进入路线时触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18949991/

相关文章:

ember.js - Emberjs - 获取单击的元素的属性

javascript - Bootstrap - 让文本 div 在图像大小上动态调整大小

javascript - 在 Javascript 中使用 lambda 演算(使用教堂数字)的递归问题

javascript - javascript中的对象访问与数组访问

ember.js - App.get ('router' ).send 导致此错误 Uncaught TypeError : Cannot redefine property: __ember1346884664897

ember.js - 如何将数据从路由发送到组件?

JavaScript 变量分成组

javascript - JavaScript 中第一行文本的长度

javascript - Ember.js:从排序的 ArrayController 中删除项目

ember.js - 如何突出显示选定的地址?