2013-09-06 4 views
0

с учетом модальности для входа в систему пользователя Я хочу вернуться к пути, с которого пользователь нажал кнопку входа в систему. Поскольку некоторые другие вопросы предполагают, я пытался сохранить предыдущий путь в контроллере приложения к глобальному создан в App под названием prevPath:Как вернуться к предыдущему динамическому пути emberjs

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

Проблемы в том, что у меня есть динамические пути, так что маршрутизатор не знает, что когда я даю ему prevPath.

Текущее решение заключается в использовании window.history.back, что является уродливым, и я полагаю, что это не лучший способ пойти.

ответ

3

В client side authentication of embercasts, есть хороший способ справиться с этим:

В принципе, у вас есть App.AuthenticatedRoute, где все маршруты, которые требуют аутентификации будет распространяться. В крюке beforeModel проверяется, проверяется ли пользователь, в этом случае присутствует токен. Если токен отсутствует, текущий переход сохраняется.

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'); 
    } 
    ... 
}); 

Когда Логин выполняется и действительным, предыдущий переход брать self.get('attemptedTransition'), и называется retry. Это будет повторять переход, в случае перехода, когда пользователь пытался идти, перед перенаправлением аутентификации Логин:

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

При этом, вы будете иметь такое же поведение.

Надеюсь, это поможет.

Смежные вопросы