将模板加载到单个文件中以用于主干/下划线

时间:2012-12-27 09:24:30

标签: javascript jquery backbone.js underscore.js templating

我有一个骨干应用程序,由symfony2服务器提供。

我有很多主干视图,每个都有几个使用下划线模板引擎在不同时间渲染的模板。

我正在努力弄清楚如何以最高效率向客户端提供下划线模板。

到目前为止,我已经在twig中编写了所有模板,然后在初始请求期间将它们作为内联脚本标记呈现给响应HTML。这导致用户第一次进入我的应用程序时服务器的响应时间很长。

输出示例:

<html>
<head>
   ...
</head>
<body>
    <script type="text/template" id="template1">
        <div class="example">
            <%= someparam %>
        </div>
    </script>
    <script type="text/template" id="template2">
        <div class="anotherExample">
            <%= otherparam %>
        </div>
    </script>
    ...
    ...
    ...
</body>
</html>

替代

现在我正在寻找一种更好的方法来加载这些模板。也许通过在单个文件中获取第二个请求,就像外部JS文件一样。但是对于我尝试的任何东西,我发现很难访问单个模板(比如通过id引用它们)或者将它们保存在一个有效的结构中(在单个文件中,没有太多的字符串操作或太多的http请求)。

TL; DR

如何加载许多下划线模板?

2 个答案:

答案 0 :(得分:1)

您可以考虑使用JST方法,即将模板连接到单个javascript文件中。该模式在this Backbone Patterns tutorial中描述。

我不熟悉Symfony / Twig,所以我不知道是否有任何可用的工具。根据您的问题,我猜您可以轻松地使用现有工具将模板呈现为javascript文件而不是HTML文档。

答案 1 :(得分:1)

我认为更好的方式 - 它是预编译模板,尝试使用jsttojs,它将帮助您获得所有模板的单个文件。

例如,从命令行

jsttojs templates compiled/templates/index.js --ext mustache --watch

或使用grunt的解决方案,grunt-jsttojs