1

私は d3 を使用しており、selection.each() 呼び出しによって実行される関数のスコープにいくつかの変数を渡したいと考えています。私は変数eを宣言しD、外部関数内で、次にその関数内で、変数を宣言した後、クラスのすべてに対して無名関数を実行しています.points。私の問題は、内部関数をグローバル変数にしないと、内部関数のスコープにD入ることができないように見えることです。eこれらを内部関数に渡す簡単な方法はありますか?

function endSelection(d){
    var e = selector.extent();
    var D = d;

    mainSVG.selectAll(".points")
        .each(function(d){
            if(d[D.x] >= e[0][0]){
                d3.select(this).call(addClass,["foo"])
                d3.select(this).call(removeClass,["bar"])
            } else {
                d3.select(this).call(addClass,["bar"])
                d3.select(this).call(removeClass,["foo"])
            };
        });
}
4

1 に答える 1

3

その無名関数の仮パラメーターに「d」をリストする必要はありません。

mainSVG.selectAll(".points")
    .each(function(){
        if(d[D.x] >= e[0][0]){

外側のスコープで宣言された変数は、同じ識別子のより内側の宣言によって「シャドウ」されていない限り、常に内側のスコープで使用できます。それがあなたのコードで起こっていることです。

「D」はまったく必要ありません。「d」を参照するだけです。ここで、d3 コードが反復子として使用される関数に何か有用なものを渡す場合は.each()、それを宣言しますが、「d」とは異なる名前を付けます。

mainSVG.selectAll(".points")
    .each(function(not_d){
        if(not_d[d.x] >= e[0][0]){
于 2013-03-13T14:27:34.563 に答える