Handlebars.js解析对象而不是[Object object]

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)

  • 它应该是:{{{json user}}},否则将对json字符串进行编码. (12认同)
  • 效果很好.对于[express-handlebars](https://github.com/ericf/express-handlebars)用户:`var exphbs = require('express-handlebars'); app.engine('handlebars',exphbs({helpers:{json:function(context){return JSON.stringify(context);}}}));` (4认同)
  • 或者只是在渲染时包含帮助器.`res.render('index',{var1:'some value',helpers:{json:function(context){return JSON.stringify(context);}});` (3认同)

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)


Jef*_*ery 6

我在 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指出的那样)。


Saj*_*jad 5

您可以在 Handlebars 模板中渲染列表或对象的键/值,如下所示:

{{#each the_object}}
  {{@key}}: {{this}}
{{/each}}
Run Code Online (Sandbox Code Playgroud)