Handlebars无法正常工作,请求入门指导及代码排查帮助
帮你排查Handlebars代码无法运行的问题
嘿,刚上手Handlebars踩坑太正常了,我帮你梳理下代码里的几个关键问题,咱们一步步修正:
先看你代码里的核心错误
- 模板内容放错位置:你把Handlebars的模板变量(
{{title}}、{{body}})放在了<script id="contact-template">标签外面,这会导致Handlebars根本找不到模板内容,浏览器直接把这些变量当成普通文本显示了。 - 获取模板源的方式错误:你用
let source = $('#contact-template')拿到的是jQuery对象,而Handlebars.compile()需要的是模板的文本内容,得用.html()方法提取。 - 缺少数据传递与页面渲染步骤:你编译了模板,但没传入要渲染的数据,也没把渲染后的结果插入到页面中。
- 可能遗漏了依赖库:如果页面没引入jQuery和Handlebars的库文件,代码也会跑不起来。
修正后的完整代码
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Handlebars Demo</title> <!-- 先引入依赖库 --> <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/handlebars@4.7.7/dist/handlebars.min.js"></script> </head> <body> <div id="container"></div> <!-- 模板内容必须放在这个script标签内部 --> <script id="contact-template" type="text/x-handlebars-template"> <div class="entry"> <h1>I'm {{title}}</h1> <div class="body">{{body}}</div> </div> </script> <script> (async function () { // 提取模板的纯文本内容 let source = $('#contact-template').html(); // 编译模板生成渲染函数 let template = Handlebars.compile(source); // 定义要渲染的动态数据 let data = { title: "Handlebars新手", body: "终于把模板跑起来啦!" }; // 用数据渲染模板,得到最终HTML字符串 let html = template(data); // 把渲染后的内容插入到页面容器中 $('#container').html(html); })(); </script> </body> </html>
每个修正点的解释
- 依赖库引入:在head里先引入jQuery和Handlebars的库,确保代码执行时这些工具已经加载完成。
- 模板位置修正:把所有带Handlebars变量的HTML结构放到
type="text/x-handlebars-template"的script标签内部,这样浏览器不会直接解析它,只会当作模板文本保存。 - 正确获取模板源:用
$('#contact-template').html()拿到模板的纯文本内容,传给Handlebars.compile()生成渲染函数。 - 数据传递与渲染:定义包含
title和body的数据源,调用编译好的模板函数生成最终HTML,最后把HTML插入到页面的容器(比如#container)中。
这样修改后,你的Handlebars模板就能正常渲染出动态内容啦!
内容的提问来源于stack exchange,提问作者Anelia Kostadinova
相关产品推荐
相关产品推荐

