只有在emberjs中激活“基础”路径时才执行代码

时间:2014-09-05 23:44:42

标签: javascript ember.js

当“基础”路线被激活/重新激活时,有没有办法执行?我有以下网址:

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路线,因为模型已经加载,钩子不会再次触发。有没有办法在projects路由被激活时听取总是强制执行该规则?

例如,如果我转到/projects/23然后我转到/projects我想将它们自动转换为单个项目路线(如果只有一个)。我不知道如何实现这一点,因为它是一个嵌套路由,并且在第一次访问activate时已经触发了afterModel/projects/23方法。

这有意义吗?我怎么能做到这一点?

1 个答案:

答案 0 :(得分: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'));
        }
    },

});