余烬父路由重定向到子路由

Ember parent route redirection to child route

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

我的路线如下所示:

App.Router.map(function () {
    this.resource('index', { path: '/' }, function() {
        this.resource('label', { path: '/label' }, function() {
            this.route('notes', { path: '/:label_id' });
        });
        this.route('manage', { path: '/manage' });
    });
});

用户应仅访问label.notesmanage路线。我正在尝试找到如何实现从index重定向到label.notes的解决方案。文档中描述的方法之一是:

App.IndexRoute = Ember.Route.extend({
    redirect: function() {
        this.transitionTo('label.notes', 0);
    }
});

这是带有完整示例 http://jsbin.com/UnasOse/1/edit 的 jsbin

如果用户通过单击链接进行导航,则这有效,但如果manage通过 url 打开或页面更新,用户将被重定向到 notes .

那么,如何仅在用户打开根网址(index)时才实现重定向?

使用您当前的路由器映射,您可以获得路由index.managelabel.notes。当页面在index.manage中刷新时,首先它将转换为父路由,在这种情况下为index,然后转换为manage。但是在你index你有重定向,所以管理不会被处理。

只需删除映射resource('index')并更新管理路由以反映新配置,因此链接到index.manage将变得manage,并且数据模板名称=索引/管理管理等。

更新的路由映射如下:

App.Router.map(function () {    
  // this.route('index', { path: '/' }); generated by ember
  this.resource('label', { path: '/label' }, function() {
    this.route('notes', { path: '/:label_id' });
  });
  this.route('manage', { path: '/manage' });    
});

您可以保留 IndexRoute,因为 ember 默认会创建一个this.route('index', { path: '/' })。因此,您的 IndexRoute 将在用户转到 http://yoursite.com/

您可以在此 jsbin http://jsbin.com/ucanam/1024/edit 中看到该示例的实际效果