如何在#if中使用逻辑OR

时间:2013-08-13 14:58:09

标签: javascript templates handlebars.js

我有服务器发给我的数据。

如果没有数据项,我不希望容器<p>存在。但是可能有几个数据项或1个数据项,如果存在,我需要一个<p>包装器。

理想情况下,我正在寻找某种#ifor助手,它将接受任意数量的参数。这可能吗?

{{#ifor firstname||lastname||nickname||age}}
<p>
  {{#if firstname}}
    <span class="firtname">{{firstname}}</span>
  {{/if}}

  {{#if lastname}}
    {{lastname}}
  {{/if}}

  {{#if age}}
   Age: {{age}}
  {{/if}}

  {{#if nickname}}
    - ( {{type}} )
  {{/if}}
</p>
{{/if}}

1 个答案:

答案 0 :(得分:1)

一个简单的解决方案是编写一个帮助程序,接受您希望测试的属性,而不使用OR运算符。然后迭代参数并检查它们是否与真值测试匹配:

Handlebars.registerHelper('ifor', function() {
    var l, opts;

    opts = Array.prototype.pop.call(arguments);
    for (l = arguments.length-1; l>=0; l--) {
        // test against undefined if you prefer
        //if (typeof(arguments[l])!=='undefined')

        if (arguments[l])
            return opts.fn(this);
    }

    return opts.inverse(this);
});

小提琴http://jsfiddle.net/G5Vhc/1/