【问题标题】: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>

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-03
      • 1970-01-01
      • 2014-12-07
      相关资源
      最近更新 更多