如何在ember中添加或更改运行时的路由(ember-cli)

时间:2014-11-30 11:47:28

标签: ember.js routes router ember-cli

我正在使用ember-cli构建应用程序,并希望能够在运行时更改路由。假设我们定义了以下路由器:

import Ember from 'ember';
import config from './config/environment';

var Router = Ember.Router.extend({
  location: config.locationType
});

Router.map(function() {
  this.route('me');
  this.route('users', function() {
    this.route('user', {path:'/user_id'});
  });
});

export default Router;

身份验证后,我想将me路由的路径更改为经过身份验证的用户ID(或slug):

this.route('me', path:'/6');

这样我可以进行导航,包括正确的活动状态,如下所示:

{{link-to "me"}}Me{{/link-to}}
{{link-to "users"}}Users{{/link-to}}

read您可以多次运行router.map()而不会覆盖以前的路线,但我无法弄清楚后续地图调用是如何从另一个模块进行的,而不是{{ 1}}。

1 个答案:

答案 0 :(得分:2)

首先,我会高度建议不要这样做。它不仅可能不受Ember支持而且可能导致大量问题,但有很多方法可以处理这种情况而不会动态改变路径结构。

话虽这么说,你可以像在路由器模块中那样从另一个模块调用map(),只需先导入路由器。例如,如果您打算在afterModel挂钩中执行此操作:

import Router from '../router';

export default Ember.Route.extend({
    model: function() {
        return this.getAndAuthenticateUser();
    },
    afterModel: function() {
        Router.map(function() {
            this.route('newlyDefinedRoute');
        });
    }
});