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

Place a brace just before {{# ... }} in Mustache templates

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

输入 1

哈希:

{
  "things": []
}

输出:

<pre>
{}
</pre>

输入 2

哈希:

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

输出:

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

为了保持简单性,该示例有点合成。

我最初的想法没有奏效:

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

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

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)

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

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

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

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

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