Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
If statement 检查是否有一个值等于在Ember Handlebar中(如果为block helper)_If Statement_Ember.js_Handlebars.js - Fatal编程技术网

If statement 检查是否有一个值等于在Ember Handlebar中(如果为block helper)

If statement 检查是否有一个值等于在Ember Handlebar中(如果为block helper),if-statement,ember.js,handlebars.js,If Statement,Ember.js,Handlebars.js,如何检查的If块帮助器中的值相等 {{#if person=="John"}} 我们如何在把手中执行上述操作?帮助程序{{{{if}}只能测试属性,不能测试任意表达式。因此,在这种情况下,最好编写一个属性,计算您想要测试的任何条件 personIsJohn: function() { return this.get('person') === 'John'; }.property('person') 然后做{{{#if personIsJohn}} 注意:如果您觉得这太有限,您也可以。使

如何检查的If块帮助器中的值相等

{{#if person=="John"}}
我们如何在把手中执行上述操作?

帮助程序
{{{{if}}
只能测试属性,不能测试任意表达式。因此,在这种情况下,最好编写一个属性,计算您想要测试的任何条件

personIsJohn: function() {
  return this.get('person') === 'John';
}.property('person')
然后做
{{{#if personIsJohn}}

注意:如果您觉得这太有限,您也可以。

使用,从而避免在类中重复定义计算属性(如上面的
personIsJohn
):

您可以使用
App.ElseEqualComponent
定义比较的else部分:

// else_equal_component.js script
App.ElseEqualComponent = App.IfEqualComponent.extend();

// else-equal.handlebars template
{{#unless isEqual}}
  {{yield}}
{{/unless}}
用法:
扩展Jo Liss的答案,您现在可以使用computed property宏来实现这一点,以获得更简洁易读的代码

personIsJohn: function() {
  return this.get('person') === 'John';
}.property('person')
变成

personIsJohn: Ember.computed.equal('person', 'John')

如果您使用的是HTMLBars(Ember版本1.10+),那么您可以使用Ember Truth Helper插件:

一旦安装,它将非常简单:

{{#if (eq person "John")}} hello {{/if}}

虽然这个问题可以通过使用eq-helper通过编写

{{#if (eq person "John")}} hello {{/if}}
但对于一般解决方案,您可以创建自己的助手,它将三个参数
param[0]
param[2]
作为操作数,而
param[1]
作为运算符。下面是帮助文件

compare.js

import Ember from 'ember';

export function compare(params) {
  if(params[3]){  //handle case insensitive conditions if 4 param is passed.
    params[0]= params[0].toLowerCase();
    params[2]= params[2].toLowerCase();
  }
  let v1 = params[0];
  let operator = params[1];
  let v2 = params[2];
  switch (operator) {
    case '==':
      return (v1 == v2);
    case '!=':
      return (v1 != v2);
    case '===':
      return (v1 === v2);
    case '<':
      return (v1 < v2);
    case '<=':
      return (v1 <= v2);
    case '>':
      return (v1 > v2);
    case '>=':
      return (v1 >= v2);
    case '&&':
      return !!(v1 && v2);
    case '||':
      return !!(v1 || v2);
    default:
      return false;
  }
}

export default Ember.Helper.helper(compare);
为了更大的检查

{{#if (compare money '>' 300)}} {{/if}}

依此类推。

在@JoLiss中也有这个问题的答案。你能从模板向计算属性传递任意表达式吗?不,计算属性不能接受参数。因此,您需要为每个要测试的值分别创建一个CP:
personIsJohn
personIsMike
。。。或者注册一个新的
(如果是类似于
)的助手——请参阅我上面的编辑。回答不错。他们真的需要把这个放在把手上。谢谢@JoLiss-这正是我今天需要的,可以过滤掉很多组织中除了一个以外的所有组织。嗨,Jo,我正在尝试类似的东西,但没有成功。sectionfeedIsEqual:(function(){{{{{debugger}}返回这个。get('param1')==这个。get('param2');}.property('param1',param2')))但我无法在param1和param2c中获取值。如果没有ember cli,它可以使用吗?@AbbasovAlexander:我还没有尝试过没有ember cli,但我不明白为什么不能。这不是普通的手柄。@doublejosh您需要安装truth helper插件。:-)
import Ember from 'ember';

export function compare(params) {
  if(params[3]){  //handle case insensitive conditions if 4 param is passed.
    params[0]= params[0].toLowerCase();
    params[2]= params[2].toLowerCase();
  }
  let v1 = params[0];
  let operator = params[1];
  let v2 = params[2];
  switch (operator) {
    case '==':
      return (v1 == v2);
    case '!=':
      return (v1 != v2);
    case '===':
      return (v1 === v2);
    case '<':
      return (v1 < v2);
    case '<=':
      return (v1 <= v2);
    case '>':
      return (v1 > v2);
    case '>=':
      return (v1 >= v2);
    case '&&':
      return !!(v1 && v2);
    case '||':
      return !!(v1 || v2);
    default:
      return false;
  }
}

export default Ember.Helper.helper(compare);
{{#if (compare person '===' 'John')}} {{/if}}
{{#if (compare money '>' 300)}} {{/if}}