2013-09-06 4 views
0

étant donné une modalité pour se connecter à l'utilisateur Je souhaite revenir au chemin d'accès à partir duquel l'utilisateur a appuyé sur le bouton de connexion. Comme d'autres questions suggèrent que j'ai essayé de sauver le chemin précédent dans le contrôleur d'application à une approche globale créée en App sous le nom prevPath:Comment revenir au chemin dynamique précédent emberjs

  pathMemory = null, 
      previousPath: function(){ 
       if (this.pathMemory){ 
        App.set('prevPath',this.pathMemory); 
       } 
       this.pathMemory = this.get('currentPath'); 
      }.observes('currentPath') 

Le problème est que j'ai des chemins dynamiques de sorte que le routeur ne sait pas quoi charge quand je lui donne le prevPath.

La solution actuelle est d'utiliser window.history.back, ce qui est moche et je suppose que pas la meilleure façon de procéder.

Répondre

3

Dans le client side authentication of embercasts, ont une belle façon de le gérer:

Fondamentalement, vous avez un App.AuthenticatedRoute, où toutes les voies qui ont besoin d'authentification prolongeront. Dans le crochet beforeModel, est vérifié si l'utilisateur est authentifié, dans ce cas, la présence du jeton. Si le jeton n'est pas présent, la transition en cours est stockée.

App.AuthenticatedRoute = Ember.Route.extend({ 
    ... 
    beforeModel: function(transition) { 
    if (!this.controllerFor('login').get('token')) { 
     this.redirectToLogin(transition); 
    } 
    }, 

    redirectToLogin: function(transition) { 
    alert('You must log in!'); 

    var loginController = this.controllerFor('login'); 
    loginController.set('attemptedTransition', transition); 
    this.transitionTo('login'); 
    } 
    ... 
}); 

Lorsque la connexion est réalisée et est valide, la transition précédente est de prendre en self.get('attemptedTransition'), et est appelé retry. Cette nouvelle tentative de la transition, dans le cas, la transition où l'utilisateur a tenté aller, avant l'authentification de connexion redirect:

... 
var attemptedTransition = self.get('attemptedTransition'); 
    if (attemptedTransition) { 
    attemptedTransition.retry(); 
    self.set('attemptedTransition', null); 
    } else { 
    // Redirect to 'articles' by default. 
    self.transitionToRoute('articles'); 
    } 
    ... 

Avec cela, vous aurez le même comportement.

J'espère que ça aide.

Questions connexes