2014-09-05 73 views
1

当“基本”路线激活/重新激活时是否有执行的方法?我有以下网址:仅当在基础路线中激活“基本”路线时才执行代码

Router.map(function() { 

    // /projects 
    this.resource('projects', function() { 

     // /projects/2 
     this.resource('project', {path: ':id'}); 
    }); 
}); 

我想transitionTo单个项目途径,如果只有一个从projects路线返回的项目。我可以这样做:

import Ember from 'ember'; 

export default Ember.Route.extend({ 

    model: function() { 
     return this.store.findAll('project'); 
    }, 

    afterModel: function(projects, transition) { 
     if (projects && projects.get('length') === 1) { 
      this.transitionTo('project', projects.get('firstObject')); 
     } 
    } 
}); 

这工作得很好......除了我仍然可以去projects路线,因为该模型已经被加载的钩不再次触发。有没有办法在0123.路线被激活时总是执行该规则?

例如,如果我去/projects/23,然后我去/projects我想自动转换它们到单个项目路线,如果只有一个。我不知道该怎么做,因为它是一个嵌套的路线,activateafterModel方法在第一次访问/projects/23时已经被解雇了。

这有道理吗?我该如何做到这一点?

回答

1

在您的项目资源上使用索引路由。它只会被击中,当你打/projects

ProjectsIndex

export default Ember.Route.extend({ 

    model: function() { 
     var projects = this.modelFor('projects'); 
     if (projects && projects.get('length') === 1) { 
      this.transitionTo('project', projects.get('firstObject')); 
     } 
    }, 

}); 
+0

真棒。完美的作品。谢谢! – David 2014-09-06 01:33:33