Javascript 比较空格{{{#if}}块中的模板帮助器值
我需要比较嵌套模板中的两个模板帮助器值。我想知道是否有一种简单的方法可以比较{{{if}}语句中的两个模板帮助程序(一个来自父模板),如下所示:Javascript 比较空格{{{#if}}块中的模板帮助器值,javascript,templates,meteor,meteor-blaze,spacebars,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}} {{{#每个出价} {
{{#each bids}}
{{#if bid.price===../job.price}}
<span>some text</span>
{{else}}
<span>some other text</span>
{{/if}}
{{/each}}
{{{#每个出价}
{{{如果bid.price==../job.price}
一些文本
{{else}
其他一些文本
{{/if}
{{/每个}}
如果不能这样做,我想另一个选择是在每个块内的新模板中使用Template.parentData?我并不反对这样做,只是如果可能的话,我上面概述的方法会更快、更简单。谢谢。我相信你是对的,空格键在
\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}}
{{{#每个出价}
{{{#ifx“bid.price==../job.price”}
一些文本
{{else}
其他一些文本
{{/ifx}
{{/每个}}
唯一的缺点是,您需要将条件写成字符串,而
eval
并不十分优雅。但是,嘿,它是有效的。像这样的东西可能适合你:
Template.registerHelper(''函数(){
返回_
})
{{{#每个出价}
{{{如果{.isEqual bid.price../job.price}}
一些文本
{{else}
其他一些文本
{{/if}
{{/每个}}
作为奖励,您不仅可以获得
.isEqual
,还可以获得所有的..*函数。因此,我最终通过运行bids.forEach(函数(bid){bid.match=bid.price==Template.currentData().job.price;})让代码正常工作;在我的bids助手中,有效地将匹配条件添加到bids助手中。我仍然想知道空格键是否能处理比较逻辑。从我搜索的所有内容来看,它看起来不像是。你也可以注册一个equals函数模板。registerHelper('equals',函数(a,b){return a==b;})
,但我更喜欢Peppe L-G注册下划线的想法。同意,它更优雅、更灵活。raix:handlebar helpers也有类似的用途