比较空格键 #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 块中的模板帮助器值的主要内容,如果未能解决你的问题,请参考以下文章