Javascript 在#if语句中使用helper函数的Handlerbars.js

Javascript 在#if语句中使用helper函数的Handlerbars.js,javascript,templating,mustache,Javascript,Templating,Mustache,使用,我想根据生成的json显示两个html块 假设我想感谢我的用户在我的商店订购商品。 我像这样编写handlerbars.js模板: <p>{{name}}</p> {{#if costIsZero}} Can't find any order {{else}} You bought {{cost}} items in our shop, thanks. {{/if}} Handlebars.registerHelper('costIsZero', fu

使用,我想根据生成的json显示两个html块

假设我想感谢我的用户在我的商店订购商品。 我像这样编写handlerbars.js模板:

<p>{{name}}</p>
{{#if costIsZero}}
  Can't find any order
{{else}}
    You bought {{cost}} items in our shop, thanks.
{{/if}}
Handlebars.registerHelper('costIsZero', function(){
    return this.cost == 0
});
当我将其与以下json数据混合时:

var data = {
  "name":"foo",
  "cost": 9
};
无论“成本”的值是多少,{{如果成本为零}}似乎总是正确的。 如果我注释掉helper本身,因此没有任何代价为零,那么它总是返回false

上面的所有代码都可以作为JSFiddle使用

我做错了什么

也许我在劫持Handlebar.js的工作方式,但在这种情况下,我应该如何使用Handlebar.js实现我的功能?

试试以下方法:

Handlebars.registerHelper('if', function(conditional, block) {
  if(this.cost == 0) {
    return block(this);
  } else {
    return block.inverse(this);
  }
})
试试这个:

Handlebars.registerHelper('if', function(conditional, block) {
  if(this.cost == 0) {
    return block(this);
  } else {
    return block.inverse(this);
  }
})

在计算表达式(如
costIsZero
时,不会调用帮助程序

如果,您可以创建一个自定义帮助器,作为
的替代方案:

handlebar.registerHelper('ifCostIsZero',函数(块){
如果(this.cost==0){
返回块(本);
}否则{
返回块。反向(此);
}
});
您会像这样使用它:

{{{#如果成本为零}
找不到订单
{{else}
你在我们店里买了{{cost}}件商品,谢谢。
{{/ifCostIsZero}
或者,您可以使用股票
if
(或
除非
),因为您的测试是针对零的:

{{{#如果成本}
你在我们店里买了{{cost}}件商品,谢谢。
{{else}
找不到订单
{{/if}

您可以在

处同时使用这两个选项。在计算表达式(如
costIsZero
时,不会调用帮助程序

如果
,您可以创建一个自定义帮助器,作为
的替代方案:

handlebar.registerHelper('ifCostIsZero',函数(块){
如果(this.cost==0){
返回块(本);
}否则{
返回块。反向(此);
}
});
您会像这样使用它:

{{{#如果成本为零}
找不到订单
{{else}
你在我们店里买了{{cost}}件商品,谢谢。
{{/ifCostIsZero}
或者,您可以使用股票
if
(或
除非
),因为您的测试是针对零的:

{{{#如果成本}
你在我们店里买了{{cost}}件商品,谢谢。
{{else}
找不到订单
{{/if}
您可以在

上使用这两个选项,只需一个小评论。块(此)不再有效。您必须使用block.fn(this);只是一个小评论。块(此)不再有效。您必须使用block.fn(this);