使用Laravel / Blade和JavaScript,使用Mustache模板进行渲染

时间:2015-01-13 16:52:35

标签: php templates laravel mustache blade

我使用的是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分隔符,那么它只能完全呈现吗?

2 个答案:

答案 0 :(得分:5)

另一种方法是使用@

转义标记
<div>@{{ $str }}</div>
<div>@{{"<a>Plain text</a>"}}</div>

将导致

<div>{{ $str }}</div>
<div>{{"<a>Plain text</a>"}}</div>

StackOverflow Answer

答案 1 :(得分:1)

这样做的一种方法是更改​​刀片的内容标记。 像这样:

Blade::setContentTags('[%', '%]');

这样{{}}标记将被视为纯字符串。 有关详细信息,请参阅以下代码段: laravel-recipes