给定一个模式来登录用户我想返回用户按下登录按钮的路径。正如其他一些问题所示,我试图将应用程序控制器中的上一个路径保存到名为App
的{{1}}中创建的全局:
prevPath
问题是我有动态路径,所以当我给他 pathMemory = null,
previousPath: function(){
if (this.pathMemory){
App.set('prevPath',this.pathMemory);
}
this.pathMemory = this.get('currentPath');
}.observes('currentPath')
时,路由器不知道要加载什么。
目前的解决方案是使用prevPath
,这是丑陋的,我认为不是最好的方法。
答案 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');
}
...
有了这个,你就会有同样的行为。
我希望它有所帮助。