在Mustache模板中转义双括号{{...}}.(在NodeJS中模板化模板)

Nic*_*nas 29 javascript template-engine node.js mustache

我正在尝试模板模板,如下所示:

{{{
{
  "name" : "{{name}}",
  "description" : "{{description}}"
}
}}}

{{{debug this}}}
Run Code Online (Sandbox Code Playgroud)

<h1>{{name}}</h1>
Run Code Online (Sandbox Code Playgroud)

我希望三个括号留在哪里,但是用传入的JSON代替双括号.任何人都知道在没有编写后处理JS代码的情况下执行此操作的最佳方法,如果没有,是否有一个很好的nodeJS模板引擎场景类型?

tmu*_*sch 68

本问题所述,把手不支持更改分隔符.但你可以用这样的反斜杠逃避双括号:

HTML:

... \{{ myHandlbarsVar }} ...
Run Code Online (Sandbox Code Playgroud)

  • 这在Mustache中不起作用...而这个问题特别关于胡子.显然,人们已经发现这个答案很有用,所以不要向我发出任何声响,但是想对任何发现这个问题的人发表评论并认为它可以解决他们所有的问题. (7认同)
  • 2021年了,这个答案仍然在拯救人们(比如我),非常感谢!车把文档链接:https://handlebarsjs.com/guide/expressions.html#escaping-handlebars-expressions (2认同)

bob*_*cow 43

您可以将分隔符切换为不会与三重胡须相冲突的内容,例如erb样式标记:

{{=<% %>=}}
{{{
{
  "name": "<% name %>",
  "description": "<% description %>"
}
}}}
{{{debug this}}}
<%={{ }}=%>
Run Code Online (Sandbox Code Playgroud)

请注意,您可以在整个模板中多次执行此操作.任何时候遇到冲突的东西,选择一组新的分隔符:)

  • 在Handlebars中,你用反斜杠逃脱括号. (9认同)
  • 等待.你想知道Handlebars?你把它标记为Mustache和Mustache.js,甚至没有提到Handlebars :) (3认同)

Chr*_*all 13

您也可以Mustache.tags = ["[[", "]]"];在模板编译之前进行分配.

http://jsfiddle.net/fhwe4o8k/1/

例如

    $(function () {
        Mustache.tags = ["[[", "]]"];
        var template = $('#test').html();
        Mustache.parse(template);
        var rendered = Mustache.render(template, {test: "Chris"});
        $('#content-placeholder').html(rendered);
    });
Run Code Online (Sandbox Code Playgroud)


Aus*_*aws 6

另一个选项是创建一个帮助器来输出大括号.

Handlebars.registerHelper('curly', function(object, open) {
    return open ? '{' : '}';
});
Run Code Online (Sandbox Code Playgroud)

然后在模板中使用它,如下所示:

<script id="template" type="text/x-handlebars-template">
    {{curly true}}{{name}}{{curly}}
</script>
Run Code Online (Sandbox Code Playgroud)

然后输出:

{Stack Over Flow Rocks}
Run Code Online (Sandbox Code Playgroud)