0

给定一个模式来登录用户,我想返回到用户按下登录按钮的路径。正如其他一些问题所暗示的那样,我尝试将应用程序控制器中的先前路径保存到在App名称下创建的全局prevPath

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

问题是我有动态路径,所以当我给他prevPath.

当前的解决方案是使用window.history.back,这很丑陋,我想这不是最好的方法。

4

1 回答 1

3

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

这样,您将具有相同的行为。

我希望它有所帮助。

于 2013-09-06T17:05:38.170 回答