You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

如何在Mustache模板的{{# ... }}表达式前添加大括号?

在Mustache模板中给{{# .. }}表达式前添加大括号的实现方法

嘿,我懂你要解决的问题了——就是想在Mustache的区块表达式(像{{#things}}这种)前面输出一个字面量的大括号,同时还要根据things数组的内容渲染出对应的结果对吧?你之前试的\{{{#things}} {{name}} {{/things}}\}不管用,其实是没搞对Mustache里转义和区块语法的优先级~

下面给你两种靠谱的实现方案,完全贴合你的示例场景:

方案一:直接输出字面量大括号 + 结合区块/反区块逻辑

其实Mustache不会把模板里单独的{}当作语法解析,你可以直接把它们写在模板里,然后用Mustache的**区块(section)处理有数据的情况,用反区块(inverted section)**处理空数组的情况,完美匹配你的两个输入:

最终模板代码

<pre>
{{#things}}
{ listOfThings: [ {{#.}}"{{name}}"{{^@last}}, {{/last}}{{/.}} ] }
{{/things}}
{{^things}}
{}
{{/things}}
</pre>

效果验证

  • 当输入是{ "things": [] }时,反区块{{^things}}触发,输出<pre>{}</pre>
  • 当输入是{ "things": [ { "name": "thing1" }, { "name": "thing2" } ] }时,区块{{#things}}触发,输出<pre>{ listOfThings: [ "thing1", "thing2" ] }</pre>

为什么你的初始尝试无效?

你写的\{{{#things}}是把三个大括号连在一起,Mustache会把{{{识别为不转义的变量输出语法,而不是你想要的“转义一个大括号再加区块表达式”。正确的做法是把字面量的{直接和Mustache表达式分开写,不需要额外转义,Mustache只会解析{{...}}包裹的部分。

方案二:临时切换分隔符(适合复杂场景)

如果遇到字面量大括号和Mustache语法紧挨着容易混淆的场景,你可以临时切换Mustache的分隔符,避免冲突:

<pre>
{{=<% %>=}}
{ <%#things%>listOfThings: [ <%#.%>"<%name%>"<%^@last%>, <%/last%><%/.%> ] <%/things%> }
<%={{ }}=%>
</pre>

这里{{=<% %>=}}把Mustache的分隔符改成了<% %>,这样模板里的{}就只会被当作普通字符串输出,最后用<%={{ }}=%>切回原来的{{ }}分隔符。不过针对你的场景,方案一已经足够简洁了。


内容的提问来源于stack exchange,提问作者Ruslan Gunawardana

火山引擎 最新活动