带嵌套数组对象的小胡子模板

时间:2013-02-09 20:36:59

标签: javascript mustache

可以使用一些帮助来弄清楚为什么我的Mustache模板无法正确呈现。我很困惑,为什么以下不起作用。我确定这是我的一个小愚蠢的错误或其他......

   var tableRows = [
    {name: 'name1',
     values: ['1','2','3']},
    {name: 'name2',
     values: ['1','2','3']},
    {name: 'name3',
     values: ['1','2','3']}
    ];

var template = $('#mustache-template').html();

$('#target').append(Mustache.render(template, {rows: tableRows}));

HTML模板:

<div id="mustache-template">
    <table>
        <tbody>
              {{#rows}}
                <tr class="">
                  <td>{{name}}</td>
                  {{#values}}
                    <td>{{.}}</td>
                  {{/values}}
                </tr>
              {{/rows}}
        </tbody>
    </table>
</div>

我期待一个表,每个数组项都是自己的行,但我得到的是:

[object Object]

这是一个jsFiddle来说明:http://jsfiddle.net/gF9ud/

2 个答案:

答案 0 :(得分:13)

问题是浏览器将模板处理为无效的表元素。将模板存储在这样的页面上并不是一个好主意,使用<script type="text/template">来包装它们:

<script id="mustache-template" type="text/template">
    <table>
      {{#rows}}
        <tr class="">
          <td>{{name}}</td>
          {{#values}}
            <td>{{.}}</td>
          {{/values}}
        </tr>
      {{/rows}}
    </table>
</script>

http://jsfiddle.net/zHkW5/

答案 1 :(得分:3)

我找到的另一个解决方案是将小胡子注释掉:

<div id="mustache-template">
    <table>
        <tbody>
             <!--  {{#rows}} -->
                <tr class="">
                  <td>{{name}}</td>
                  {{#values}}
                    <td>{{.}}</td>
                  {{/values}}
                </tr>
              <!-- {{/rows}} -->
        </tbody>
    </table>
</div>

对我来说,它完全按照我的希望呈现。我认为浏览器会在tr标记之间看到代码。