在Mustache模板中的{{#...}}之前放置一个大括号

时间:2018-01-07 02:09:21

标签: javascript node.js handlebars.js mustache template-engine

我想在{{#..}}表达式之前放置一个大括号表达式。我怎样才能做到这一点? 例如,对于这些输入:

输入1

哈希:

{
  "things": []
}

输出:

<pre>
{}
</pre>

输入2

哈希:

{
  "things": [
    { "name": "thing1" },
    { "name": "thing2" },
  ]
}

输出:

<pre>
{
  listOfThings: [
    "thing1",
    "thing2",
  ]
}
</pre>

这个例子有点合成,以保持简洁。

我最初的想法并不奏效:

<pre>
\{{{#things}}
  {{name}}
{{/things}}\}
</pre>

2 个答案:

答案 0 :(得分:1)

创建一个帮助器来输出大括号。

Handlebars.registerHelper('curly', function(object, open) {
    return open ? '{' : '}';
});

您可以按照以下方式使用它。

<script id="template" type="text/x-handlebars-template">
    {{curly true}}{{name}}{{curly}}
</script>

如果您将{true}传递给curly,则会显示左括号。否则,它将显示结束括号。

输出如下。

{Stack Over Flow Rocks}

回复Escape double braces {{ ... }} in Mustache template. (templating a template in NodeJS)

的学分

答案 1 :(得分:1)

我会在输出中使用HTML Entities作为所需的文字花括号。您的示例模板将变为以下内容:

<pre>
    &lbrace;{{#things}}
        {{name}}
    {{/things}}&rbrace;
</pre>

但是,我想指出,此模板会产生您问题中所述的所需输出。为此,您需要以下内容:

<pre>
&lbrace;
    listOfThings: [
        {{#each things}}
           "{{name}}",
        {{/each}}
    ]
&rbrace;
</pre>

我创建了一个fiddle供您参考。