gpt4 book ai didi

ember.js - EmberJS : Return to current route after login

转载 作者:行者123 更新时间:2023-12-04 07:54:13 26 4
gpt4 key购买 nike

我有一个应用程序,匿名用户可以在其中查看只读 View 。当用户单击链接登录时,我想保存当前的路由和模型,并在认证成功后恢复它。

这与大多数拦截 beforeModel 中的转换并重定向登录的示例略有不同。

App.ApplicationController = Ember.Controller.extend({
actions: {
logIn: function() {
this.set('previousPath', this.get('currentPath'));
this.transitionToRoute('login');
}
}
});

App.LoginController = Ember.Controller.extend({
needs: 'application',
username: '',
password: '',

actions: {
logIn: function () {
var self = this;

App.session.logIn(this.get('username'), this.get('password')).then(
function() {
var route = self.get('controllers.application.previousPath')
self.transitionToRoute(route);
});
}
}
});

这适用于静态路由,但对于动态路由,模型和路由参数会丢失。

如何捕获当前 Controller 的模型或路由参数以便我可以恢复它们?

最佳答案

我找到了一种类似于拦截重定向重试模式的方法。

首先,记住应用程序路由中最近的转换,只要它不是登录的转换:

App.ApplicationRoute = Ember.Route.extend({
beforeModel: function(transition) {
this._saveTransition(transition);
},
actions: {
willTransition: function (transition) {
this._saveTransition(transition);
}
},
_saveTransition: function (transition) {
if (transition.targetName !== 'login') {
this.controllerFor('login').set('previousTransition', transition);
}
}
});
beforeModel进入应用程序或硬刷新页面时触发。 willTransition在每次后续转换时触发。

然后 LoginController 可以在认证成功后重试之前的转换:
App.LoginController = Ember.Controller.extend({
username: '',
password: '',

actions: {
logIn: function () {
var self = this;

App.session.logIn(this.get('username'), this.get('password')).then(
function() {
var previousTransition = self.get('previousTransition');

if (previousTransition) {
previousTransition.retry();
return;
}

self.transitionToRoute('index');
});
}
}
});

关于ember.js - EmberJS : Return to current route after login,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21122503/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com