Cómo hacer una transición programática entre rutas usando el nuevo enrutador de Ember.js
Pregunta:
¿Cómo hace la transición programática a una nueva ruta con el nuevo Ember.js Router?
Fondo / ContextoCon el antiguo Ember.js Router, podría realizar una transición programática entre rutas / estados utilizando el enrutadorsend
método:
//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();
Transición programática:
App.get('router').send('moveElsewhere');
Dado el nuevo enrutador Ember.js (abajo), ¿cómo logramos lo mismo?
//NEW Router Syntax
App.Router.map(function(match) {
match('/').to('aRoute');
match('/someOtherLocation').to('bRoute');
});
Trabajo Alrededor (¿Mala Solución?)Esto no puede ser correcto, ¿verdad ?:
window.location = window.location.href + "#/someOtherLocation";
Soluciones que no parecen funcionar con el nuevo enrutador:1) llamando alsend
método en elApp.router
ejemplo
> App.router.send("moveElseWhere")
TypeError: Cannot call method 'send' of undefined
2) Declarar explícitamente la Ruta y establecer un evento.
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'
Nota: Al momento de escribir elDocumentación del router Ember.js todavía se refiere al viejo enrutador, donde como elGuía del router Ember.js se refiere al nuevo enrutador