有选择地触发重定向

时间:2013-11-16 07:05:46

标签: ember.js url-routing

这是我路由器的一部分:

this.resource('nodes', function () {

    this.resource('allNodes', function () {
        this.route('index');
        this.route('new');
        this.route('show',   { path: '/:node_id/show' });
        this.route('edit',   { path: '/:node_id/edit' });
        this.route('delete', { path: '/:node_id/delete' });
    });

    this.resource('services', function () {
        this.route('index');
        this.route('new');
        this.route('show',   { path: '/:service_id/show' });
        this.route('edit',   { path: '/:service_id/edit' });
        this.route('delete', { path: '/:service_id/delete' });
    });
...

/nodes路线中,我会重定向到allNodes.index

SettingsApp.NodesRoute = Ember.Route.extend({
    redirect: function () {
        console.log('NodesRoute.redirect > redirecting to %s', ROUTES.ALL_NODES);
        this.transitionTo(ROUTES.ALL_NODES);
    }
});

现在,在我的应用程序的其他部分,我正在使用url链接到服务:

#/nodes/services/71ae38cde8584dc9c4eea25e74e68310/show

但这不起作用,因为/nodes的重定向正在进行中。我该如何防止这种情况发生?

转到/nodes时,重定向必须仅为 ,而不是任何子网址。我必须通过在重定向之前检查currentPath手动实现此过滤,还是有标准的方法来执行此操作?

2 个答案:

答案 0 :(得分:1)

您需要手动实现(虽然信息在钩子中提供)

Addiitionally redirect是一个弃用的钩子,支持afterModel钩子。

SettingsApp.NodesRoute = Em.Route.extend({
  afterModel: function(resolvedModel, transition){
     if(transition.targetName == 'nodes'){
        this.transitionTo(ROUTES.ALL_NODES);
     }
  }
});

答案 1 :(得分:1)

NodesIndexRoute中进行重定向。

 App.NodesIndexRoute = Ember.Route.extend({
   beforeModel: function () {
    this.transitionTo('allnodes');
   }
 });

Working Model