d3.js动态创建画笔函数

时间:2013-09-05 17:56:18

标签: javascript d3.js brush

我的'固定长度'示例效果很好。

我目前有一组画笔(我用于直方图),我在数组中定义:

var brushFunctionArray = [brush0,brush1,brush2];

我通过直方图循环创建直方图,并为我使用的每个画笔:

var brush = d3.svg.brush()
                .x(x)
                .on("brush", brushFunctionArray[i]);

我像这样定义画笔:

function brush0 () {brushmove(0);}
function brush1 () {brushmove(1);} 
function brush2 () {brushmove(2);} 

然后有一个关于brushmove的定义:

function brushmove(index){ 
    ...
    ...
}

这很好用。但是,我希望能够在运行时使数组超出固定长度(brush0 ... brushB)。我试图动态创建函数:

var brushFunctionArray = [];

for (var i = 0; i < numOfHistograms; i++){
    var func = new Function("return function brush" + i + "  () {brushmove("+i+");}")();
    brushFunctionArray.push(func);
}

这会创建函数并将它们插入到数组中,但我不能像以前那样在.on(“brush”,..)中使用brushFunctionArray,因为函数在那里而不是函数的名称。另外,当我将函数放入数组时,我不再初始化它们。

感谢您的任何建议!

1 个答案:

答案 0 :(得分:0)

您应该可以通过在阵列中插入匿名(即未命名)函数来使用它们。

var brushFunctionArray = [];
for (var i = 0; i < numOfHistograms; i++){
  brushFunctionArray.push(function() { brushmove(i); });
}