You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Handlebars(hbs)文件的script标签中渲染数据

解决Handlebars模板中script标签无法获取变量的替代方案

以下是几种比隐藏input更直接的实用方案:

1. 直接在script标签中渲染转义后的JSON

Handlebars默认会转义HTML字符,所以需要用**三重花括号({{{}}})**输出未转义的JSON字符串,让script直接拿到可用的JavaScript对象。

实现步骤:

  • 后端注册Handlebars helper,用于将对象转为合法JSON字符串:
// Node.js后端代码
const hbs = require('hbs');

hbs.registerHelper('safeJSON', function(obj) {
  return JSON.stringify(obj);
});
  • 模板中调用helper注入数据:
<script>
  const Labels = {{{safeJSON Labels}}};
  console.log(Labels); // 可直接访问数据属性
</script>

2. 后端预转JSON后传入模板

如果不想注册helper,可在后端提前把数据转为JSON字符串,再作为变量传给模板:

实现步骤:

  • 后端处理数据:
// Node.js后端代码
const rawLabels = /* 你的原始数据对象 */;
const labelsJSON = JSON.stringify(rawLabels);

// 同时传递原始数据和JSON字符串给模板
res.render('your-template', { Labels: rawLabels, labelsJSON });
  • 模板中直接解析使用:
<script>
  const Labels = JSON.parse(`{{{labelsJSON}}}`);
</script>

用反引号包裹是为了避免数据中的双引号和模板字符串冲突,三重花括号确保JSON不被转义。

3. 通过Puppeteer直接注入数据到浏览器上下文

如果数据仅需在浏览器运行时使用,无需写入静态HTML,可以跳过Handlebars模板,直接用Puppeteer把数据注入页面:

// Puppeteer代码
const targetLabels = /* 你的数据对象 */;

await page.evaluate((labels) => {
  // 将数据挂载到全局window对象,页面内script可直接访问
  window.Labels = labels;
}, targetLabels);

// 加载渲染后的HTML页面,即可使用window.Labels
await page.goto('your-rendered-html-url');

这种方法完全分离了模板渲染和数据传递,适合动态数据场景。


内容的提问来源于stack exchange,提问作者Sarthak Agarwal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 10:01:18