dzm*_*dzm 65 javascript json handlebars.js
我正在使用Handlebars模板并且JSON数据已经在[Object object]中表示,我如何在Handlebars之外解析这些数据?例如,我试图通过把手标签在页面上填充JavaScript变量,但这不起作用.
有什么建议?谢谢!
编辑:
为了澄清,我正在使用ExpressJS w/Handlebars进行模板化.在我的路线中,我有这个:
var user = {}
user = {'id' : 123, 'name' : 'First Name'}
res.render('index', {user : user});
Run Code Online (Sandbox Code Playgroud)
然后在我的index.hbs模板中,我现在有了一个{{user}}对象.我可以{{#each}}用来迭代对象就好了.但是,我也在使用Backbonejs,我想将这些数据传递给View,例如:
myView = new myView({user : {{user}});
问题是,如果我把它放在console.log中,{{user}}只是[Object object]在源代码中显示我得到一个错误,'意外的标识符'.
Jon*_*ski 145
输出时{{user}},车把会先检索user的.toString()值.对于普通Objects,默认结果就是"[object Object]"你所看到的.
为了获得更有用的东西,您要么想要显示对象的特定属性:
{{user.id}}
{{user.name}}
Run Code Online (Sandbox Code Playgroud)
或者,您可以使用/定义帮助程序以不同方式格式化对象:
Handlebars.registerHelper('json', function(context) {
return JSON.stringify(context);
});
Run Code Online (Sandbox Code Playgroud)
myView = new myView({
user : {{{json user}}} // note triple brackets to disable HTML encoding
});
Run Code Online (Sandbox Code Playgroud)
ngu*_*yên 11
您可以简单地将JSON 字符串化:
var user = {}
user = {'id' : 123, 'name' : 'First Name'};
// for print
user.stringify = JSON.stringify(user);
Run Code Online (Sandbox Code Playgroud)
然后在模板打印:
{{{user.stringify}}};
Run Code Online (Sandbox Code Playgroud)
我在 node-js 中使用服务器端模板,但这也可能适用于客户端。我在 node.js 中注册了Jonathan的 json 助手。在我的处理程序中,我通过 res.locals 添加上下文(例如 addressBook)。然后我可以在客户端存储上下文变量,如下所示:
<script>
{{#if addressBook}}
console.log("addressBook:", {{{json addressBook}}});
window.addressBook = {{{json addressBook}}};
{{/if}}
</script>
Run Code Online (Sandbox Code Playgroud)
注意三重卷曲(正如Jim Liu指出的那样)。
您可以在 Handlebars 模板中渲染列表或对象的键/值,如下所示:
{{#each the_object}}
{{@key}}: {{this}}
{{/each}}
Run Code Online (Sandbox Code Playgroud)