javascript - 将 D3 图表嵌入到 Handlebars 模板中

标签 javascript d3.js handlebars.js

我正在尝试将 d3 图形嵌入到 Handlebars 模板中,但是当我嵌入 Handlebars 的对象registryhelper 时,返回 [object SVGSVGElement] 而不是 html。

带有 Handlebars 注册表助手的 D3 图表

 Handlebars.registerHelper('list', function() {
 svg = d3.select('p').append("svg").attr("width",w).attr("height",h);
 var rect1 =svg.append("rect").attr("x",0).attr("y",3*h/4).
 attr("width",w).attr("height",rect_1_h).style("fill",rect_1_color);
 return svg;
 });

Handlebars 模板

{{#each objects}}
 <tr>
 <td><p>{{#list}}{{/list}}</p></td>
 </tr>
 {{/each}}

最佳答案

Handlebars 正在显示 svg 对象的 toString 值。

使用html()方法获取svg的HTML表示,参见https://github.com/mbostock/d3/wiki/Selections#wiki-html

然后使用Handlebars.SafeString指示Handlebars不要转义HTML,如下所示:return new Handlebars.SafeString(svg.html())

但在此之前,请考虑示例中的一些问题:

  1. 您正在使用d3.select,这意味着从 DOM 中选择一个元素。然后您就可以直接影响 DOM 中的该元素。不像“函数”那样工作,可能您想要做的是在内存中创建 p 元素。或者,也许您可​​以解决使用 DOM 的问题,而无需创建 Handlebars 助手。

  2. 一个小问题:将 var 添加到 svg,否则您将使用全局变量。

关于javascript - 将 D3 图表嵌入到 Handlebars 模板中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14852520/

相关文章:

javascript - 构建一个有条件的 Ember 助手

Javascript 数据模型,交叉引用

javascript - Javascript 库中名为 undefined 的变量

javascript - 遍历样式对象中的每个属性

javascript - 将 div 或 svg 转换为 datauri

d3.js - 一些 map 路径的笔触是碎片化的

javascript - 如何通过 Handlebars 中的索引访问和迭代数组项?

javascript - 如何使用 jQuery 使图像在滚动条上淡入淡出?

javascript - 'string | null' 类型的参数不可分配给 'ValueFn<SVGPathElement, Datum[], string | number | boolean | null>' 类型的参数

node.js - NodeJS Handlebars : 'TypeError: this.engine is not a function'