比较Spacebars {{#if}}块中的模板助手值

时间:2015-02-06 16:02:13

标签: javascript templates meteor meteor-blaze spacebars

我需要比较位于嵌套模板中的两个模板助手值。我想知道是否有一种简单的方法来比较{{#if}}语句中的两个模板助手(一个来自父模板),如下所示:

{{#each bids}}
  {{#if bid.price===../job.price}}
    <span>some text</span>
  {{else}}
    <span>some other text</span>
  {{/if}}
{{/each}}

如果你不能这样做,我想另一种选择是在每个块内的新模板中使用Template.parentData?我并不反对这一点,如果可能的话,我上面概述的方式会更快更简单。感谢。

2 个答案:

答案 0 :(得分:11)

这样的事可能适合你:

Template.registerHelper('_', function(){
    return _
})
{{#each bids}}
  {{#if _.isEqual bid.price ../job.price}}
    <span>some text</span>
  {{else}}
    <span>some other text</span>
  {{/if}}
{{/each}}

作为奖励,您不仅可以获得_.isEqual,还可以获得所有_。*功能。

答案 1 :(得分:0)

我相信你是对的,空格键不支持#if条件下的逻辑语句。但是您可以轻松定义一个新的块助手:

HandlebarsRegister.registerHelper('ifx', function(conditional, options) {
    var truthValue = false;
    try {
        truthValue = eval(conditional);
    } catch (e) {
        console.log("Exception in #ifx evaluation of condition: ",
                    conditional, e);
    }
    if (truthValue) {
        return options.fn(this);
    } else {
        return options.inverse(this);
    }
});

然后使用

{{#each bids}}
  {{#ifx "bid.price===../job.price"}}
    <span>some text</span>
  {{else}}
    <span>some other text</span>
  {{/ifx}}
{{/each}}

唯一的缺点是你需要把你的条件写成一个字符串而eval并不完全优雅。但是,嘿,它有效。