spacebars:如何使用和/或if语句

时间:2015-02-10 08:09:25

标签: meteor spacebars

我有以下代码:

 <div class="form-group {{#if afFieldIsInvalid name='latitude' OR name='longitude'}}has-error{{/if}}">......</div>

如果在空格键模板的条件下如何使用AND / OR?

6 个答案:

答案 0 :(得分:10)

Spacebars无法处理逻辑表达式,因此您需要创建一个帮助程序来处理您的计算。

实际上,您可以使用嵌套ifs实现and功能:

{{#if condition1}}
    {{#if condition2}}
        <p>Both condition hold!</p>
    {{/if}}
{{/if}}

or就像这样:

{{#if condition1}}
    <p>One of the conditions are true!</p>
{{else}}
    {{#if condition2}}
        <p>One of the conditions are true!</p>
    {{/if}}
{{/if}}

但我更喜欢使用帮手。

答案 1 :(得分:3)

Spacebars是Handlebars的扩展,旨在成为无逻辑模板语言。

解决方案是注册帮助程序。对于一般情况,请参阅以下类似问题:

要在Meteor中定义助手,请使用Template.registerHelper

答案 2 :(得分:0)

您有针对此案例设计的扩展程序。

Raix Handlebars

您可以使用“AND”条件,如下所示:

{{#if $in yourVariable 'case1' 'case2' }}
      Your code Here
{{/if}}

答案 3 :(得分:0)

进一步解决问题。这会添加比较运算符。

Handlebars.registerHelper('ifCond', function (v1, operator, 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);
        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);
        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);
        case '||':
            return (v1 || v2) ? options.fn(this) : options.inverse(this);
        default:
            return options.inverse(this);
    }
});

在这样的模板中使用它:

{{#ifCond name='latitude' '||' name='longitude'}}

答案 4 :(得分:0)

您可以使用if-else语法

<div class="form-group {{#if afFieldIsInvalid}} latitude {{else}} longitude {{/if}} has-error">...</div>

答案 5 :(得分:-6)

而不是使用&#39; OR&#39;试试&#39; ||&#39;。 或者在javascript文件中定义方法。