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

如何通过JavaScript访问Handlebars模板传递的对象变量

解决方案

你之前的写法失败是因为两个核心问题:

  1. 直接输出{{ListOfLoggedUsers}}时,Handlebars会调用数组的toString()方法,最终得到[object Object],[object Object]...这类无效的JS语法,无法被解析为对象数组
  2. 双大括号{{ }}默认会转义所有HTML特殊字符(比如引号、尖括号),即使你输出的是JSON字符串,转义后的内容也不符合JS语法要求

方法1:修改服务端代码实现(推荐)

第一步:服务端将数组序列化为JSON字符串

修改你的路由渲染代码,提前把对象数组转为JSON格式字符串传递给模板:

app.get('/private', requiresAuth(), function (req, res) {
// ... 原有逻辑
    res.render('private', {
        ListOfLoggedUsers: ListOfLoggedUsers,
        // 新增序列化后的JSON字段
        ListOfLoggedUsersJSON: JSON.stringify(ListOfLoggedUsers)
    });
})

第二步:模板内联JS中使用非转义语法读取

在内联脚本中用三个大括号{{{ }}}(Handlebars的非转义输出语法)直接读取序列化后的JSON内容:

<script>
var loggedUser = {{{ListOfLoggedUsersJSON}}};
console.log(loggedUser)
</script>

方法2:无需修改服务端代码,注册Handlebars助手实现

如果不想改动现有服务端传参逻辑,可以全局注册一个JSON序列化助手:

// 服务端注册Handlebars助手(示例基于express-handlebars)
handlebars.registerHelper('json', function(obj) {
  return JSON.stringify(obj);
});

模板内直接调用助手即可:

<script>
var loggedUser = {{{json ListOfLoggedUsers}}};
console.log(loggedUser)
</script>

注意事项

JSON标准不支持undefined类型,你示例数据里的undefined字段序列化后会自动转为null,如果业务需要区分undefined和null,可以在序列化时自定义转换规则,将undefined替换为自定义标识值,前端读取后再做还原。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 03:06:03