【问题标题】:Place a brace just before {{# ... }} in Mustache templates在 Mustache 模板中的 {{# ... }} 之前放置一个大括号
【发布时间】:2018-06-16 10:54:21
【问题描述】:

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

输入 1

哈希:

{
  "things": []
}

输出:

<pre>
{}
</pre>

输入 2

哈希:

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

输出:

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

为了简单起见,这个例子有点合成。

我最初的想法没有奏效:

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 非常感谢。每天在网络上发现新事物:D
    【解决方案2】:

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

    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)

    【讨论】:

    • 谢谢。这解决了问题,但我希望有一个更简单的解决方案。
    猜你喜欢
    • 2010-12-12
    • 2012-12-06
    • 2021-08-21
    • 1970-01-01
    • 2021-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多