Procédure de programmation pour la transition entre les routes à l'aide de Ember.js " nouveau Routeur

Question:

Comment voulez-vous faire par programmation de la transition à une nouvelle route à l'aide de la nouvelle Ember.js Routeur?

Contexte

Avec l'ancien Ember.js Routeur vous pouvez par programmation de la transition entre les routes/états à l'aide du routeur send méthode:

//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();

Programatic Transition:

App.get('router').send('moveElsewhere');

Compte tenu de la nouvelle Ember.js Routeur (ci-dessous) comment pouvons-nous faire la même chose?

//NEW Router Syntax
App.Router.map(function(match) {
  match('/').to('aRoute');
  match('/someOtherLocation').to('bRoute');
});

Travail Autour De (Mauvaise Solution?)

cela ne peut pas être à droite, à droite?:

window.location = window.location.href + "#/someOtherLocation";

Des Solutions qui ne semble pas fonctionner avec le Nouveau Routeur:

1) l'appel de la send méthode sur la App.router instance

> App.router.send("moveElseWhere")
TypeError: Cannot call method 'send' of undefined

2) déclarer Explicitement la Route et la configuration d'un événement

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'

Remarque: Au moment de la rédaction de la Ember.js la documentation du Routeur fait toujours référence à l'Ancien Routeur, où, comme le Ember.js Routeur guide se réfère à la nouvelle Routeur

OriginalL'auteur Evan R. | 2013-01-06