比较空格键 #if 块中的模板帮助器值

Posted

技术标签:

【中文标题】比较空格键 #if 块中的模板帮助器值【英文标题】:Compare template helper values in Spacebars #if block比较空格键 #if 块中的模板帮助器值 【发布时间】:2015-04-06 19:59:38 【问题描述】:

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

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

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

【问题讨论】:

所以我最终通过运行 bids.forEach(function(bid) bid.match = bid.price===Template.currentData().job.price; ) 让我的代码工作;在我的出价助手中,有效地将匹配条件添加到出价助手中。我仍然想知道空格键是否可以处理比较逻辑。从我搜索的所有内容来看,它看起来不像。 你也可以只注册一个等于函数Template.registerHelper('equals', function(a, b) return a===b;),但我更喜欢 Peppe L-G 注册下划线的想法。 同意,它更优雅、更灵活。 raix:handlebar-helpers 也有类似的用途 【参考方案1】:

这样的事情可能对你有用:

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,还可以获得所有 _.* 函数。

【讨论】:

【参考方案2】:

我相信你是对的,空格键不支持#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 并不完全优雅。但是,嘿,它有效。

【讨论】:

以上是关于比较空格键 #if 块中的模板帮助器值的主要内容,如果未能解决你的问题,请参考以下文章

Meteor.js 模板块中的“或”条件

% if % 块中的 Django 模板标签不显示

向 % if % 块中的自定义模板标签提供参数的语法

使用 Jade 呈现的 HTML 值中的额外空格

我们可以阻止 SQL Server 除了忽略值中的尾随空格吗

HTML 电话链接可以接受值中的空格吗?