我使用的是Laravel,我的所有模板都使用Blade模板。页面的一些部分需要在服务器端和JavaScript上呈现。对于这些我使用Mustache模板(使用mustache-l4)。
问题是如何让Laravel渲染模板,还要将它们包含在Mustache标记完整的页面中,以供JS选择。
例如,如果我有一个(简化示例)Blade模板,如下所示:
<html>
<head></head>
<body>
<h1>{{ $pageTitle }}</h1>
@include('partials/'.$partialName, array('some_text' => $pageText))
<script type="text/mustache">
@include('partials/'.$partialName)
</script>
</body>
</html>
其中包含.mustache
部分内容:
{{#some_text}}
<p>{{some_text}}</p>
{{/some_text}}
Mustache partial在页面加载时呈现得很好。但是当它包含在<script></script>
标签之间时,我希望它逐字呈现。即,{{#some_text}}
Mustache标记应该在呈现的HTML中存在。然后JavaScript可以将其作为Mustache模板读取。
我可以看到changing the tag delimiters on the server-side (Blade) templates可能有这种情况,但在此阶段,已经有大量的Blade模板工作了,我宁愿不这样做。
我无法理解如何做到这一点。我可以在其中包含的一个时间内更改Mustache分隔符,那么它只能完全呈现吗?
答案 0 :(得分:5)
另一种方法是使用@
转义标记<div>@{{ $str }}</div>
<div>@{{"<a>Plain text</a>"}}</div>
将导致
<div>{{ $str }}</div>
<div>{{"<a>Plain text</a>"}}</div>
答案 1 :(得分:1)
这样做的一种方法是更改刀片的内容标记。 像这样:
Blade::setContentTags('[%', '%]');
这样{{}}标记将被视为纯字符串。 有关详细信息,请参阅以下代码段: laravel-recipes