如何覆盖 Handlebars 的 `if` 助手
Posted
技术标签:
【中文标题】如何覆盖 Handlebars 的 `if` 助手【英文标题】:How to override Handlebars' `if` helper 【发布时间】:2019-02-05 00:16:14 【问题描述】:我正在寻找一种方法来改变 Handlebars 的 if
助手的工作方式。
Mandrill 已将a few modifications 制成标准把手。这些方便的更改之一是它们处理 Handlebars 的 if
块助手的方式。他们在 if
帮助器中添加了评估表达式的功能,如下所示:#if `purchases > 3`
我需要能够在本地编译 Mandrill 模板,以进行测试和预览,而此功能使其变得困难。我知道我可以编写自己的自定义助手,但在这种情况下,我正在寻找一种方法来改变内置 if
助手的工作方式。
我想我可以构建自己的 Handlebars 版本。 还有其他建议吗?
【问题讨论】:
【参考方案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>
【讨论】:
以上是关于如何覆盖 Handlebars 的 `if` 助手的主要内容,如果未能解决你的问题,请参考以下文章
Ember.js - 使用 Handlebars 助手检测子视图是不是已呈现
将 someVar+'a string' 传递给 Handlebars.js 助手?