在ember中定义重定向路由导致其他路由不起作用

时间:2013-09-03 18:14:05

标签: ember.js

我的路线定义为:

AS.Router.map(function(){
    this.resource('analytics', {path: '/analytics'}, function(){
        this.route('index', {path: '/'});
        this.route('config', {path: '/config'});
    ); 
});

AS.AnalyticsRoute = Ember.Route.extend({
    redirect: function() {
        this.transitionTo('analytics.index');
    }
});

使用上面的配置,我可以加载页面:

/#/分析

- 这会加载分析/索引模板

/#/分析/配置

- 这会加载analytics / config模板

但是#/ analytics / index没有加载,它只显示加载的gif图像。以下是我的模板的样子:

的分析:

{{outlet}}

分析\指数:

index

分析\设置:

config

我是否有办法在不破坏#/ analytics的情况下将URL链接到#/ analytics / index工作?

谢谢, DEE

1 个答案:

答案 0 :(得分:0)

如果在路由器映射中定义resource,则analytics.index是隐式路由,不应显式定义。默认行为是,analytics.index模板将在您analytics定义的地方的{{outlet}}模板的插座中呈现。

因此,例如,这应该按预期工作:

AS.Router.map(function(){
  this.resource('analytics', {path: '/analytics'}, function(){
    this.route('config', {path: '/config'});
  ); 
});

这会将analytics.index模板正确呈现到analytics模板插座。

如果导航到analytics并且您希望将用户重定向到"/",则可以直接访问/analytics路由,那么您应该从IndexRoute重定向:

AS.IndexRoute = Ember.Route.extend({
  redirect: function() {
    this.transitionTo('analytics');
  }
});

希望它有所帮助。