触发过渡到“加载”#39; ember-simple-auth认证后的路由

时间:2015-01-11 23:28:04

标签: ember.js ember-simple-auth

我想向登录我的应用程序的用户显示“loading ...”动画。

如果模型返回一个promise,Ember会自动转换为“加载”路径(如果有的话),这样就可以显示“加载”模板,直到服务器响应为止。

现在,我有一个登录表单,其中submit触发我的控制器中的'authenticate'操作(在LoginControllerMixin中定义)。 这似乎不被承认为ember的承诺,因此应用程序不会转换到“加载”路径。

也许有一种解决方法可以使用简单的身份验证会话状态,但我无法弄清楚

任何帮助将不胜感激

2 个答案:

答案 0 :(得分:2)

这不是一个承诺,而是它不是过渡的一部分。如果要修改身份验证mixin,可以让它手动转换到加载路由,然后开始承诺,然后转换到目标后验证。老实说,如果这是值得的,我会感到惊讶,除非你的后端验证真的很慢。

您可以将身份验证逻辑更改为以下内容:

this.transitionTo('loading').then(function(){      
  authenticateLogicCall().then(function(){
    this.transitionTo('authenticatedResource');
  });
});

答案 1 :(得分:1)

我认为加载路由只有在转换时才能很好地工作,并且框架正在等待目标路由的model挂钩返回的承诺来解决。但Ember Simple Auth的LoginControllerMixin的authenticate行动并非如此。要显示加载消息,您可以直接覆盖authentication操作:

export default Ember.Controller.extend(LoginControllerMixin, { actions: { authenticate: function() { var _this = this; this.set('loading', true); this._super().then(function() { _this.set('loading', false); }, function() { _this.set('loading', false); }); } } });