如果或声明的话

时间:2014-07-17 18:00:21

标签: javascript templates ember.js conditional handlebars.js

在ember中使用条件时,是否可以有OR

{{#if foo OR bar}}

{{#if foo || bar}}

docs中似乎没有任何内容。

3 个答案:

答案 0 :(得分:13)

您应该将逻辑移动到控制器

App.SomeController = Em.Controller.extend({
  foo: true,
  bar: false,

  fooOrBar: Em.computed.or('foo', 'bar')
});

将模板逻辑保持在最低限度

{{#if fooOrBar}}

答案 1 :(得分:11)

使用https://github.com/jmurphyau/ember-truth-helpers: ember安装ember-truth-helpers 然后你可以说 {{#if(或foo bar)}} 根据您的观点,Kingpin2k的答案有点过时了。以前,社区的理解是模板应该基本上没有逻辑。加班,我们的观点已转向在模板中加入更多的声明性逻辑 - ember-composable-helpers就是一个很好的例子。

答案 2 :(得分:-2)

您可以创建自定义Handlebar辅助函数来检查条件运算符。

Ember.Handlebars.registerHelper('ifCond', function (temp_v1, operator, temp_v2, options) {
var v1,v2;
v1 = Ember.Handlebars.get(this, temp_v1, options);
v2 = Ember.Handlebars.get(this, temp_v2, options);    
switch (operator) {
    case '||':
        return (v1 || v2) ? options.fn(this) : options.inverse(this);
    case '&&':
        return (v1 && v2) ? options.fn(this) : options.inverse(this);
    case '==':
        return (v1 == v2) ? options.fn(this) : options.inverse(this);
    default:
        return options.inverse(this);
}
});

您可以在模板中将其称为

{{#ifCond foo '||' bar}}
    <div>Conditional helpers works </div>
{{/ifCond}}