如何覆盖Handlebars的`if`助手

时间:2018-08-30 06:25:53

标签: handlebars.js mandrill

我正在寻找一种方法来更改车把的if助手的工作方式。

Mandrill已将a few modifications设置为标准的把手。这些方便的更改之一是它们处理车把的if阻止助手的方式。他们增加了在if帮助器中求值表达式的功能,如下所示:
{{#if `purchases > 3`}}

我需要能够在本地编译Mandrill模板,以进行测试和预览,而此功能使它变得困难。我知道我可以编写自己的自定义助手,但是在这种情况下,我正在寻找一种方法来更改内置if助手的工作方式。

我想我可以构建自己的Handlebars版本。
还有其他建议吗?

1 个答案:

答案 0 :(得分:0)

只要您的工作正常,我认为重新定义标准助手没有问题。您将在下面的代码段中找到一个示例,该示例覆盖了if帮助程序,而不是文本。因此,只需注册您自己的帮助程序,它将覆盖默认的帮助程序。如果您希望{{else}}也能正常工作,则必须在if帮助程序代码中进行处理。

 
$(document).ready(function () {
  var context = {
    "textexample1" : "hello",
  };
  Handlebars.registerHelper('if', function(text) {
    return new Handlebars.SafeString(text);
  });
	var source   = $("#sourceTemplate").html();
  var template = Handlebars.compile(source);
  var html    = template(context);
  $("#resultPlaceholder").html(html);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/handlebars.js/4.0.5/handlebars.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script id="sourceTemplate" type="text/x-handlebars-template">
{{#if 'test override'}}
   {{textexample1}}
{{/if}}
</script>
<br/>
<div id="resultPlaceholder">
</div>