在灰尘助手中提供 d3 功能的好方法是什么?

What would be a good approach for providing d3 capability in a dust-helper?

现在我一直在考虑编写一个 dust-helper,使用自定义 dust-helper 和节点的 d3 模块将条形图渲染到服务器端的 dust 文件中。我想知道是否有比构造某种像这样的上下文对象以传递给灰尘渲染器更好的方法:

{
  padding: {
    top: integer,
    right: integer,
    bottom: integer,
    left: integer
  },
  width: integer,
  height: integer,
  data: [datum, ...],
  x: {
    scale: {
      type: string, // 'linear', 'time', 'ordinal'
      range: 'extent', // optionally [lower, upper]
      tick: { // if applicable
        format: string, // d3 number format for linear scale
                        // d3 time format for time scale
        args: integer | [interval, integer]
      }
    },
    value: string, // datum[value] used for x-axis
  },
  y: {
    ...
  }
}

等等,然后让 d3 使用此方案呈现自定义组件和 return 将 SVG 标记作为字符串。这对我来说似乎是一个非常冗长的选择,需要添加越来越多的属性,这些属性会使上下文膨胀,直到它变得太乱而无法很好地管理,这就是为什么我想知道是否有更好的方法可能会分裂灰尘d3 的各个组件的助手。

我一直在考虑它,我认为最好的方法是使用 d3 作为灰尘 filter 而不是如下:

dust.filters.d3 = function(value) {
    var node = d3.select(value).node();

    if (node) {
        return node.outerHTML;
    }

    return 'd3 selection not found';
};

并且只是 运行 开始灰尘渲染之前的 d3 代码。