【问题标题】:How to override Handlebars' `if` helper如何覆盖 Handlebars 的 `if` 助手
【发布时间】:2019-02-05 00:16:14
【问题描述】:
我正在寻找一种方法来改变 Handlebars 的 if 助手的工作方式。
Mandrill 已将a few modifications 制成标准把手。这些方便的更改之一是它们处理 Handlebars 的 if 块助手的方式。他们在 if 帮助器中添加了评估表达式的功能,如下所示:
{{#if `purchases > 3`}}
我需要能够在本地编译 Mandrill 模板,以进行测试和预览,而此功能使其变得困难。我知道我可以编写自己的自定义助手,但在这种情况下,我正在寻找一种方法来改变内置 if 助手的工作方式。
我想我可以构建自己的 Handlebars 版本。
还有其他建议吗?
【问题讨论】:
标签:
handlebars.js
mandrill
【解决方案1】:
我认为只要您的标准助手工作正常,重新定义标准助手就没有问题。您将在下面的 sn-p 中找到一个示例,该示例覆盖了 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>