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
Vous devez vous connecter pour publier un commentaire.
En supposant que ce Routeur définition:
vous pouvez vous déplacer vers le
new_route
avec leold_route.transitionToRoute()
fonction quand vous avez le contrôleur, selon le contexte.À partir du contrôleur
this.get('target')
- renvoie l'itinéraire à partir du contrôleur deÀ partir d'une vue
Remarque
La fonction *transitionTo() a été obsolète dans la version 1.0.0.RC3
get("target")
latransitionToRoute
fonction est accessible directement à partir du contrôleur lui-même.OriginalL'auteur CHsurfer
Je ne suis pas au courant de court comme
Ember.Route.transitionTo()
pour l'instant.Pour avoir le même comportement, vous pouvez définir un
events
objet à l'intérieur d'un itinéraire, et ensuite appelerroute.transitionTo()
.Donné votre exemple, ce doit être quelque chose comme:
Mise à JOUR Depuis ce commit: https://github.com/emberjs/ember.js/commit/6dab9beccf4a2ae700633dfd4811018e0bea5028 le contexte des événements est la route elle-même.
à partir d'un {{action}} helper par exemple, et vous pouvez toujours utiliser un routeur.envoyer ("moveElseWhere').
Je ne pense pas que le nouveau Routeur dispose d'une méthode d'envoi: (App.Routeur.envoyer == undefined) et le ARoute instance ne semble pas avoir (App.ARoute.moveElseWhere == undefined)
1)Qu'est-ce ? github.com/emberjs/ember.js/blob/master/packages/ember-routing/... 2)App.ARoute n'est pas un exemple, mais une classe, et la moveElseWhere est défini dans les avents de hachage
à partir d'un contrôleur, je pense que vous avez maintenant la capabilty pour appeler directement transitionTo()
OriginalL'auteur sly7_7
Vous pouvez utiliser
transitionTo
avec le nouveau routeur de l'API, mais vous devez le routeur d'accès instance différemment.Voir la réponse de la question L'accès instance de nouveaux Braise Routeur les possibilités.
OriginalL'auteur Thomas Herrmann
vous déclenchez un lien vers un nouvel itinéraire avec le {{linkTo}} helper:
Espère que cela aide 🙂
OriginalL'auteur R. Shane Davis