Handlebars.jsparsing对象而不是
我正在使用Handlebars模板,并且JSON数据已经在[Object object]中表示出来了,我怎样才能在Handlebars之外parsing这些数据呢? 例如,我试图通过一个句柄标签在页面上填充一个JavaScriptvariables,但这是行不通的。
有什么build议么? 谢谢!
编辑:
为了澄清,我使用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}});
问题是,如果我把它放在console.log中, {{user}}
只是在源代码中显示[Object object]
,我得到一个错误'Unexpected Identifier'。
输出{{user}}
,把手将首先检索user
的.toString()
值。 对于普通的Object
, 默认的结果是你看到的"[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 });
你可以简单的JSON string化 :
var user = {} user = {'id' : 123, 'name' : 'First Name'}; // for print user.stringify = JSON.stringify(user);
然后在模板中打印:
{{{user.stringify}}};
我在node-js中使用服务器端模板,但是这也可能适用于客户端。 我注册了Jonathan的json帮手。 在我的处理程序中,我通过res.locals添加上下文(如addressBook)。 然后我可以存储上下文variables客户端,如下所示:
<script> {{#if addressBook}} console.log("addressBook:", {{{json addressBook}}}); window.addressBook = {{{json addressBook}}}; {{/if}} </script>
注意三重曲线(正如Jim Liu所指出的那样)。
您正试图在无效的JSON对象内传递模板语法{{ }}
。
您可能需要这样做:
myView = new myView({ user : user });