我使用Handlebars模板并且JSON数据已在[Object object]中表示,如何在Handlebars之外解析这些数据?例如,我尝试通过手柄标记在页面上填充JavaScript变量,但这不起作用。
有什么建议吗?谢谢!
编辑:
为了澄清,我使用ExpressJS w / Handlebars进行模板化。在我的路线中,我有这个:
var user = {}
user = {'id' : 123, 'name' : 'First Name'}
res.render('index', {user : user});
然后在我的index.hbs模板中,我现在有一个{{user}}
对象。我可以使用{{#each}}
来仔细迭代对象。但是,我也使用Backbonejs,我想将这些数据传递给View,例如:
myView = new myView({user : {{user}});
问题是{{user}}
只是在源代码中显示[Object object]
,如果我将它放在console.log中我会收到错误,'意外的标识符'。
答案 0 :(得分:138)
输出{{user}}
时,Handlebars将首先检索user
的{{1}}值。对于普通.toString()
s,您看到的是default result of this is the "[object Object]"
。
为了获得更有用的东西,你要么想要显示对象的特定属性:
Object
或者,您可以使用/定义帮助程序以不同方式格式化对象:
{{user.id}}
{{user.name}}
Handlebars.registerHelper('json', function(context) {
return JSON.stringify(context);
});
答案 1 :(得分:10)
您可以简单地 stringify JSON:
var user = {}
user = {'id' : 123, 'name' : 'First Name'};
// for print
user.stringify = JSON.stringify(user);
然后在模板打印中:
{{{user.stringify}}};
答案 2 :(得分:4)
我在node-js中使用服务器端模板,但这也可能适用于客户端。我在节点中注册了Jonathan的json助手。在我的处理程序中,我通过res.locals添加上下文(例如addressBook)。然后我可以按如下方式存储上下文变量client side:
<script>
{{#if addressBook}}
console.log("addressBook:", {{{json addressBook}}});
window.addressBook = {{{json addressBook}}};
{{/if}}
</script>
注意三重曲线(由Jim Liu指出)。
答案 3 :(得分:1)
您正试图在无效的JSON对象中传递模板语法{{ }}
。
您可能需要这样做:
myView = new myView({ user : user });
答案 4 :(得分:0)
如果要对输出格式进行更多控制,可以编写自己的帮助器。这具有递归功能,可遍历嵌套对象。
Handlebars.registerHelper('objToList', function(context) {
function toList(obj, indent) {
var res=""
for (var k in obj) {
if (obj[k] instanceof Object) {
res=res+k+"\n"+toList(obj[k], (" " + indent)) ;
}
else{
res=res+indent+k+" : "+obj[k]+"\n";
}
}
return res;
}
return toList(context,"");
});
我们使用了用于电子邮件模板的把手,这对像以下用户一样有用
{
"user": {
"id": 123,
"name": "First Name",
"account": {
"bank": "Wells Fargo",
"sort code": " 123-456"
}
}
}
答案 5 :(得分:0)
在节点路由器中 - 将响应对象字符串化。见下一行。
response.render("view", {responseObject:JSON.stringify(object)});
在 HTML Script 标签中 - 用户模板文字(模板字符串)并使用 JSON.parse。
const json= `{{{responseObject}}}`;
const str = JSON.parse(json);
像魅力一样工作!