问题:
您如何使用新的 Ember.js 路由器以编程方式转换到新路由?
背景/上下文
使用旧的 Ember.js 路由器,您可以使用路由器的方法以编程方式在路由/状态之间转换send
:
//OLD Router Syntax
App = Ember.Application.create({
Router: Ember.Router.extend({
root: Ember.Route.extend({
aRoute: Ember.Route.extend({
route: '/',
moveElsewhere: Ember.Route.transitionTo('bRoute')
}),
bRoute: Ember.Route.extend({
route: '/someOtherLocation'
})
})
})
});
App.initialize();
程序化过渡:
App.get('router').send('moveElsewhere');
给定新的 Ember.js 路由器(如下),我们如何完成同样的事情?
//NEW Router Syntax
App.Router.map(function(match) {
match('/').to('aRoute');
match('/someOtherLocation').to('bRoute');
});
解决方法(糟糕的解决方案?)
这不可能,对吧?
window.location = window.location.href + "#/someOtherLocation";
似乎不适用于新路由器的解决方案:
1)在实例上调用send
方法App.router
> App.router.send("moveElseWhere")
TypeError: Cannot call method 'send' of undefined
2)显式声明Route并设置事件
App.ARoute = Ember.Route.extend({
events: {
moveElseWhere: function(context){
this.transitionTo('bRoute');
}
}
);
App.UploadRoute.moveElseWhere()
TypeError: Object (subclass of Ember.Route) has no method 'moveElseWhere'
注意:在编写Ember.js 路由器文档时仍然指的是旧路由器,而Ember.js 路由器指南指的是新路由器