需要 Handlebars.js 来渲染对象数据而不是“\[Object object\]”

新手上路,请多包涵

我正在使用 Handlebars 模板并且 JSON 数据已经在 [Object object] 中表示,我如何在 Handlebars 之外解析这些数据?例如,我试图通过 handlebars 标记在页面上填充 JavaScript 变量,但这不起作用。

有什么建议么?谢谢!

编辑:

为澄清起见,我正在使用带有 Handlebars 的 ExpressJS 进行模板化。在我的路线中,我有这个:

 var user = {}
user = {'id' : 123, 'name' : 'First Name'}

res.render('index', {user : user});

然后在我的 index.hbs 模板中,我现在有一个 {{user}} 对象。我可以使用 {{#each}} 来遍历对象。但是,我也在使用 Backbonejs,我想将此数据传递给视图,例如:

 myView = new myView({
   user : {{user}}
});

问题是 {{user}} 只是在源代码中显示 [Object object] 。如果我把它放在 console.log 中,我会收到一条错误消息,提示“意外标识符”。

原文由 dzm 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 602
2 个回答

当输出 {{user}} 时,Handlebars 将首先检索 user.toString() 值。对于普通的 Object s, 默认结果是 "[object Object]" 你看到的。

为了获得更有用的东西,您要么想要显示对象的特定属性:

 {{user.id}}
{{user.name}}

或者,您可以使用/定义一个助手来以不同方式格式化对象:

 Handlebars.registerHelper('json', function(context) {
    return JSON.stringify(context);
});

 myView = new myView({
    user : {{{json user}}} // note triple brackets to disable HTML encoding
});

原文由 Jonathan Lonowski 发布,翻译遵循 CC BY-SA 3.0 许可协议

您可以简单地将 JSON _字符串化_:

 var user = {}
user = {'id' : 123, 'name' : 'First Name'};
// for print
user.stringify = JSON.stringify(user);

然后在模板中打印:

 {{{user.stringify}}};

原文由 nguyên 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题