我想向登录我的应用程序的用户显示“loading ...”动画。
如果模型返回一个promise,Ember会自动转换为“加载”路径(如果有的话),这样就可以显示“加载”模板,直到服务器响应为止。
现在,我有一个登录表单,其中submit触发我的控制器中的'authenticate'操作(在LoginControllerMixin中定义)。 这似乎不被承认为ember的承诺,因此应用程序不会转换到“加载”路径。
也许有一种解决方法可以使用简单的身份验证会话状态,但我无法弄清楚
任何帮助将不胜感激
答案 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);
});
}
}
});