If statement 检查是否有一个值等于在Ember Handlebar中(如果为block helper)
如何检查的If块帮助器中的值相等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 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}}