繁体   English   中英

仅在emberjs中激活“基本”路由时才执行代码

[英]execute code only when the “base” route is activated in emberjs

激活/重新激活“基本”路由时,是否有执行方法? 我有以下网址:

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我想将它们自动转换为单个项目路由(如果只有一个)。 我不知道该怎么做,因为这是一条嵌套路线,并且第一次访问/projects/23时已经activateactivateafterModel方法。

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

在项目资源上使用索引路由。 仅当您命中/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'));
        }
    },

});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM