2

私の「固定長」の例はうまくいきます。

現在、配列で定義するブラシの配列(ヒストグラムに使用)があります。

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 の定義を 1 つ用意します。

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

これはうまくいきます。しかし、実行時に配列を固定長(ブラシ0 ...ブラシB)を超えて移動できるようにしたいと考えています。関数を動的に作成しようとしました:

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 を使用することはできません。さらに、関数を配列に入れると、初期化されなくなりました。

ご提案ありがとうございます。

4

1 に答える 1