如何返回以前的动态路径emberjs

时间:2013-09-06 14:00:42

标签: ember.js ember-router

给定一个模式来登录用户我想返回用户按下登录按钮的路径。正如其他一些问题所示,我试图将应用程序控制器中的上一个路径保存到名为App的{​​{1}}中创建的全局:

prevPath

问题是我有动态路径,所以当我给他 pathMemory = null, previousPath: function(){ if (this.pathMemory){ App.set('prevPath',this.pathMemory); } this.pathMemory = this.get('currentPath'); }.observes('currentPath') 时,路由器不知道要加载什么。

目前的解决方案是使用prevPath,这是丑陋的,我认为不是最好的方法。

1 个答案:

答案 0 :(得分: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');
  }
  ...

有了这个,你就会有同样的行为。

我希望它有所帮助。