如何让D3读取Handlebars上下文对象

时间:2014-02-09 22:38:52

标签: node.js express handlebars.js

我正在使用Node + Express.js。我的一条路线呈现了Handlebars模板及其上下文。相关部分:

my_data = JSON.parse(body);
response.render( 'activity', my_data);

我的问题:在activity.hbs模板中,如何使用D3从my_data JSON对象创建绘图。在activity.hbs的相关部分,我尝试了

<script type="text/javascript">
      Handlebars.registerHelper('json', function(context) {
          return JSON.stringify(context);
      });

     var datas = {{json my_data}}
     d3.select("body")
     .datum(datas)
     .enter()
    #do stuff with data
  </script>

我在reading this question之后添加了助手。当我尝试渲染视图时,它会出现错误:

Missing helper: 'json' at Object.<anonymous>

使用Helper正确的方法来解决这个问题吗?如何让D3读取我的上下文对象?

1 个答案:

答案 0 :(得分:1)

我认为问题出在你的帮助器定义中,基本上你是在错误的地方定义帮助器。 要定义帮助程序,根据express3-handlebars的文档,您必须在明确的应用程序代码中注册它:

var express = require('express'),
    exphbs  = require('express3-handlebars'),

  app = express(),
  hbs;

  hbs = exphbs.create({
    // Specify helpers which are only registered on this instance.
    helpers: {
      // Your custom helper here
      json: function(context) { return JSON.stringify(context); }
    }
  });
  // Register it
  app.engine('handlebars', hbs.engine);
  app.set('view engine', 'handlebars');