簡體   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