Handlebars.js 和 HTML table 显示 [object Object] 而不是值

Handlebars.js and HTML table displays [object Object] instead of values

车把和 html tables:

我遇到了一些问题
{ 
  weekdays: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'] 

}

            <table>
                <thead>
                    <tr>
                        {{#each weekdays}}
                        <th>{{this}}</th>
                        {{/each}}
                    </tr>        
                </thead>
                <tbody>
                    <tr>
                    <td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td><td>7</td>
                    </tr>
                </tbody>
            </table>

此代码适用于 tryhandlebars

使用模板时,它可以很好地处理列表和纯文本,但是当我尝试使用 table 标题和数据时,它只显示:[object Object]。 代码开启:jsfidde

这是因为您只是转储单个工作日对象,而不是指定的 属性。

你会想要改变这个:

                        {{#each days}}
                        <td>{{this}}</td>
                        {{/each}}

像这样:

                        {{#each days}}
                        <td>{{this.dayName}}</td>
                        {{/each}}

或对象上的任何 属性 名称。

问题是您正在尝试使用 html 来生成模板,但是 mustache 语句可能会生成浏览器尝试更正的无效 html。

如果您查看传递给车把的 html,您会得到:

                    {{#each weekdays}}

                    {{/each}}
                <table>
            <thead>
                <tr>
                    <!-- displays [object Object] with <template> tag --><th>{{this}}</th></tr>        
            </thead>
            <tbody>
                <tr>
                    <td>1</td>
                    <td>2</td>
                </tr>
            </tbody>
        </table>

script 标记的内容未以相同方式解析,因此您没有损坏的模板。

通常我建议您使用预编译模板而不是将它们内联到您的 html,但是如果您确实将它们内联到您的 html,您需要使用 script 标签。