简体   繁体   English

具有OR条件的Ember.js IF语句导致意外行为

[英]Ember.js IF statement with OR conditional causing unexpected behaviour

Seems a simple problem, but I just can't figure out why the following code simply won't work... 似乎是一个简单的问题,但是我无法弄清楚为什么以下代码根本行不通...

Regarding gender1 : 关于gender1

If I use a computed property and try to check it against a few strings using the conditional OR, the result outputted into the label is always "male/female/other" even if the input gender1 contains one of those... 如果我使用计算属性,并尝试使用条件OR对一些字符串进行检查,则即使输入的gender1包含以下项之一,输出到标签中的结果也始终是“ male / female / other” ...

Regarding gender2 : 关于gender2

However, if I do not use the conditional OR and test against only "male", everything works as expected... 但是,如果我不使用条件OR并仅针对“男性”进行测试,那么一切都会按预期进行...

Template 模板

<script type="text/x-handlebars" data-template-name="index">
    <label>:</label><br/><br/>
    <div>
        <label>Gender_not_working:</label>
        {{input value=gender1}}
        <label>{{verifyGender1}}</label>
    </div><br/>
    <div>
        <label>Gender_working:</label>
        {{input value=gender2}}
        <label>{{verifyGender2}}</label>
    </div><br/>
  </script>

Controller 控制者

App.IndexController = Ember.Controller.extend({
  gender1: "",
  gender2: "",
  verifyGender1: Ember.computed('gender1', function(){
    console.log(this.get('gender1').toLowerCase());
    if(this.get('gender1').toLowerCase() !== "male"||"female")
    {return "male/female/other";}
    else
    {return "MKay";}
  }),
  verifyGender2: Ember.computed('gender2', function(){
    console.log(this.get('gender2').toLowerCase());
    if(this.get('gender2').toLowerCase() !== "male")
    {return "male/female/other";}
    else
    {return "MKay";}
  }),
});

This issue also shows up on the JS Bin that I created... 这个问题也出现在我创建的JS Bin中...

That's a simple javascript mistake. 那是一个简单的JavaScript错误。
You can't compare 1 value to 2 "potential" values like you tried (val1 !== val2 || val3) . 您不能像尝试(val1 !== val2 || val3)那样将1个值与2个“潜在”值进行比较。 You can do (val1 !== val2 && val1 !== val3) or ([val2, val3].indexOf(val1) >= 0) and probably a few other ways to achieve the same effect. 您可以执行(val1 !== val2 && val1 !== val3)([val2, val3].indexOf(val1) >= 0) ,也可以通过其他几种方法来达到相同的效果。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM