检查一个等于Ember Handlebar中的值如果是帮助者

我们如何检查ember.js的If-block助手中的值相等性?

{{#if person=="John"}} 

我们如何在车把上方执行?

{{#if}}助手只能testing属性,而不是任意的expression式。 因此,在这种情况下做最好的事情是编写一个属性计算任何条件你想testing。

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

然后做{{#if personIsJohn}}

注意:如果你觉得这个限制太大,你也可以注册你自己更强大的助手 。

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

 // if_equal_component.js script App.IfEqualComponent = Ember.Component.extend({ isEqual: function() { return this.get('param1') === this.get('param2'); }.property('param1', 'param2') }); // if-equal.handlebars template {{#if isEqual}} {{yield}} {{/if}} 

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

 // else_equal_component.js script App.ElseEqualComponent = App.IfEqualComponent.extend(); // else-equal.handlebars template {{#unless isEqual}} {{yield}} {{/unless}} 

用法:

 {{#if-equal param1=person param2="John"}} Hi John! {{/if-equal}} {{#else-equal param1=person param2="John"}} Who are you? {{/else-equal}} 

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

https://github.com/jmurphyau/ember-truth-helpers

一旦安装,它将如此简单:

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

虽然这个问题可以通过编写eq帮手来解决

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

但是对于一个通用的解决scheme,你可以使自己的帮手,这将需要三个参数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 person '===' 'John')}} {{/if}} 

为更大的检查。

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

等等。

扩展Jo Liss的答案,现在可以使用计算属性macros来执行此操作,以获得更简洁和可读的代码。

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

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

Relavent Docs 。