首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >成员-如何将属性从路由文件传递到带401返回的工具栏模板

成员-如何将属性从路由文件传递到带401返回的工具栏模板
EN

Stack Overflow用户
提问于 2016-02-25 20:28:34
回答 2查看 1.2K关注 0票数 4

情况是,我有一个登录屏幕,这是工作的,除非有一个失败的登录(401没有授权)。基本上现在非常简单,手键(模板)试图从路由访问属性,以确定对后端(rails)的调用是否失败。

代码语言:javascript
复制
{{#if loginFailed}}
  <div class="alert">Invalid username or password.</div>
{{/if}}

路由文件如下所示,我省略了任何不需要的敏感代码或工作代码:

代码语言:javascript
复制
import Ember from 'ember';
import ajax from 'ic-ajax';

export default Ember.Route.extend({

loginFailed: false,
isProcessing: false,

beforeModel: function(){
    //some stuff 
},

actions: {
login: function() {
    this.setProperties({
      loginFailed: false,
      isProcessing: true
    });
    var _this = this;

    ajax({
        url: //something,
        type: 'post',
        crossDomain: true,
        data: //some stuff,
  }).then(
            function(result) {
                //logging in logic all works
            },
            function(error){
                if (error.jqXHR.status === 401)
                {

                    _this.set('isProcessing', false);
                    _this.set("loginFailed", true);
                }
            }
        );


  },
},

reset: function() {
  this.set('isProcessing', false);
  this.controller.set('password', '');
  this.controller.set('username', '');
}
});

我已经做了一些调试,它确实碰到了ajax承诺中的错误块,但是它似乎是一塌糊涂。我相信它失败了,因为它是401,有限的资源使我得出这个结论。

您可以看到,loginFailed是我试图更改的属性,当发生401错误时,在模板上这是我要访问的属性。

我对Ember来说是个新手,只是工作了一周多一点,所以任何帮助都会令人惊讶。

下面是我在我的项目中运行-v时使用的版本:

代码语言:javascript
复制
version: 1.13.8
node: 0.12.7
npm: 2.13.4
os: win32 x64
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-02-25 20:56:13

您必须设置控制器的属性,而不是路由。

代码语言:javascript
复制
_this.set("controller.loginFailed", true);

演示。

票数 3
EN

Stack Overflow用户

发布于 2016-02-26 07:05:46

不能在相应的模板中使用路由的属性。您可以为此使用控制器,也可以使用模型挂钩传递所有参数。

我认为,更好的选择可能是将路由的模板尽可能地作为虚拟模板,这样它们就可以将数据和所需的操作处理程序传递给组件。

我们的大多数路由模板只包含一个组件,所有的逻辑都位于组件及其内部组件上。所有事件处理程序也都位于组件中,除非它们需要服务器调用。因此,最好将此代码移动到登录组件中:

代码语言:javascript
复制
{{#if loginFailed}}
  <div class="alert">Invalid username or password.</div>
{{/if}}

你的路线模板会是这样的:

代码语言:javascript
复制
{{my-login-component loginPressed="login" loginData=model}}

所有其他逻辑都将在组件的js文件中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35637640

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档