【发布时间】:2013-12-16 14:32:52
【问题描述】:
我正在使用 Handlebars (v 1.0.0) 来填充 HTML 表格。 但是不知何故,它并没有像我习惯的那样填满表格。
这是我的模板:
{{#if users}}
<table>
{{#each users}}
<tr>
<td>{{username}}</td>
<td>{{email}}</td>
</tr>
{{/each}}
</table>
{{else}}
<h3>No users found!</h3>
{{/if}}
所以我确实找到了用户,因为我没有看到“未找到用户!”当我调用一个空对象时,它确实显示“未找到用户!”。
当我不使用该表并像下一个示例一样打印出这些用户时。用户名和邮件地址将显示在我的 HTML 中。
{{#if users}}
{{#each users}}
{{username}}<br/>
{{email}}<br/>
{{/each}}
{{else}}
<h3>No users found!</h3>
{{/if}}
这是我的模板在 javascript 中的构建方式:
var htmlSource = $(data).html();
var template = Handlebars.compile(htmlSource);
var compiled = template(usersArray);
that.$el.html(compiled);
现在当我 console.log 编译的对象时,它还没有显示表格。
你知道为什么它不起作用吗?你能帮帮我吗?
编辑:
我刚刚测试了一些,发现当我省略<table> 标签时,数据会显示在 HTML 中。但是 <tr> 和 <td> 不会出现在 html 中。里面的数据会显示出来。
编辑 2: 我发现这似乎是一个 jquery 问题或 javascript 问题。 当我 console.log htmlSource 时,HTML 模板更改为:
{{#if users}}
{{#each users}}
{{/each}}
{{else}}
<h3>No users found!</h3>
{{/if}}
<table><tr>
<td>{{username}}</td>
<td>{{email}}</td>
</tr></table>
如您所见,表格已移到 if 语句之外。 我尝试了其他 jquery 版本(2.0.2、2.0.3、2.0.1、1.10.2),但这不起作用。 我尝试使用 innerXHTML 脚本,但这与 jQuery 相同。
所以我的猜测是这可能是一个 FireFox 问题(尽管我尝试了 25 和 26),Chrome 也是如此......也许 EcmaScript 中的某些东西??
我会尽快通知你的……
编辑 3:
我用我需要的 html 创建了一个 html 文件。通过一个脚本,我得到了我需要的 html 的特定部分,并将其放在 data 变量中。
现在当控制台记录数据 (console.log(data)) 时没有任何问题。 当控制台使用 jQuery 记录数据时,html 被更改:console.log($(data));
那里似乎出了点问题……但仅限于使用表格标签时。 这是jQuery无法处理的事情吗?我不知道。我知道如何通过使用 script 标签来解决这个问题......虽然我想使用 require 来加载它;)
附: nemesv 感谢您的编辑;)
【问题讨论】:
-
假设
usersArray看起来像{users: [...]},它似乎按预期工作jsfiddle.net/nikoshr/Rwg6y/1 -
你用的是什么浏览器?
-
多么奇怪。我正在使用 FireFox 25.0.1,文件数组确实看起来像这样。只是不知道为什么它不能与表格一起使用并且没有.. 并且在 jsfiddle 中它可以正常工作..
-
我刚刚尝试使用更高版本的车把。还没有运气。
-
你能编辑 nikoshr 的 jsfiddle 来重现你的问题吗?
标签: javascript jquery backbone.js handlebars.js