我正在使用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}}。
答案 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');
});
}
});