如何在HTML页面中正确存储HTML模板?

时间:2012-11-28 11:34:39

标签: javascript mustache

我有一些小模板字符串,它们将通过同一页面上的Mustache.js呈现。我不需要为模板创建单独的html文件。

存储模板的选项:

  1. 存储在javascript变量中:破解多行字符串,大量转义引号。

  2. 存储为隐藏div的innerHTML。

  3. 我尝试了方法#2,但它似乎无法正常工作。

    小提琴: http://jsfiddle.net/RHwnq/2/

    <html>
    <head></head>
    <body>
    <div id='templates' class='hide' align="">
             <div id='tableTemplate'>
                <table class="table">
                     {{#name_list}}
                      <tr><td> {{name}} </td></tr>
                    {{/name_list}}
                </table>
             </div>
    </div>
    
    <script>
     var template = $('#tableTemplate').html();
     console.log(template);
    </script>
    
    </body>
    </html>
    

    此日志:

    {{#name_list}}
      {{name}} 
    {{/name_list}}
    <table class="table"><tbody><tr><td></td></tr></tbody></table>
    

    而不是:

      <table class="table">
                         {{#name_list}}
                          <tr><td> {{name}} </td></tr>
                        {{/name_list}}
      </table>
    

    这可能是由于浏览器进行了一些标记更正。 在HTML页面中存储HTML模板有哪些其他好的技巧?

4 个答案:

答案 0 :(得分:21)

我将它们存储在脚本标记中,因此它们不会被渲染,如下所示:

<script id="abc-template" type="text/html">
    <h1>{{name}}</h1>
</script>

然后您可以像这样引用它们:

var template = $('#abc-template').html();
var html = Mustache.to_html(template, data);
$('#abc-div').html(html);

答案 1 :(得分:6)

使用<script>代码非常适用于此:

<script id="tableTemplate" type="text/html">
  <table class="table">
    {{#name_list}}
    <tr><td> {{name}} </td></tr>
    {{/name_list}}
  </table>
</script>

它实际上是替代品,它适用于您的var template = $('#tableTemplate').html();

答案 2 :(得分:1)

根据您的IDE,您可能会或可能不会在<script></script>块中获得HTML语法突出显示。我像你一样使用div块,但添加

#templates {display: none;}

到CSS。

答案 3 :(得分:0)

我将使用HTML“模板”标签。

<template id="tmp">Some HTML here</template>

请参见以下示例:

https://jsfiddle.net/cityremade/xwLht8vc/

相关问题