Ember父路线重定向到子路线

时间:2013-09-13 00:36:51

标签: javascript ember.js ember-router

我的路线如下:

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路由。我正在尝试找到解决方案如何实现从indexlabel.notes的重定向。文档中描述的方法之一是:

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

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

的jsbin

如果用户通过点击链接进行导航,但是如果网址已打开manage,或者页面更新用户将被重定向到notes,则此方法有效。

那么,如何实现重定向只有用户打开根URL(index)?

1 个答案:

答案 0 :(得分:1)

使用您当前的路由器映射,您拥有路由index.managelabel.notes。 当页面在index.manage中刷新时,首先它将转换到父路线,在这种情况下转换为index,然后转移到manage。但是在您index中,您有重定向,因此不会处理管理。

只需移除resource('index')的映射并更新您的管理路由以反映新配置,因此链接到index.manage将变为manage,并且data-template-name = index /管理等等。

更新的路线映射如下:

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: '/' })。因此,只要用户转到http://yoursite.com/

,您的IndexRoute就会执行

您可以在此jsbin http://jsbin.com/ucanam/1024/edit

中查看该示例