2016-04-06 9 views
0

でグローバルにローカル変数を変換する? 私はイベントをブラッシングした後、フィルタリングされたデータを使用したいです。この機能外の他のいくつかのコードで これはd3.js(またはJavaScript)と私の最初のプロジェクトですので、質問は多くの意味がありません場合はごめんなさい私はグローバル変数として<strong>data_subset</strong>(<em>pc0.on(「ブラシ」、機能(data_subset)</em>)を作ることができますd3.js

サンプルコード:

d3.csv('data/cars.csv', function(data) { 


    pc0 = d3.parcoords()("#example0") 
     .data(data) 
     .bundlingStrength(0) // set bundling strength 
     .smoothness(0) 
     .bundleDimension("cylinders") 
     .showControlPoints(false) 
     .hideAxis(["name"]) 
     .render() 
     .brushMode("1D-axes") 
     .reorderable() 
     .interactive(); 

    // create data table, row hover highlighting 
     var grid0 = d3.divgrid(); 

     d3.select("#grid0") 
      .datum(data.slice(0,5)) 
      .call(grid0) 
      .selectAll(".row") 
      .on({ 
      "mouseover": function(d0) { pc0.highlight([d0]) }, 
      "mouseout": pc0.unhighlight 
     }); 

      // update data table on brush event 
     pc0.on("brush", function(data_subset) { 
      d3.select("#grid") 
      .datum(data_subset.slice(0,5)) 
      .call(grid0) 
      .selectAll(".row") 
      .on({ 
      "mouseover": function(data_subset) { pc0.highlight([data_subset]) }, 
      "mouseout": pc0.unhighlight 
      });   

     }); 
+1

あなたはそれを割り当てることによって、何がグローバル作ることができます'window'オブジェクトに渡します。それは、世界の国家が悪いことを認識していると確信していますので、あまり使用しないでください! –

答えて

1

Calvin Beldenのコメントには、物はwindow対象ですがおすすめできません。

あなたができることの一つは、以下の(言い訳の擬似コード)である:

// Object declaration outside of d3 call which you can store data in. 
var dict = {} 

d3.csv('data/cars.csv', function(data) { 
    var something = data.something_else; 
    dict.something = something; 
} 

var some_other_function = function() { 
    var foo = dict.something; 
} 
+0

私が抽出しようとしている変数** data_subset **は、関数内の関数の入力です(私のサンプルコードではスクリプトの最後の塊で見ることができます)。 –

+0

この内部関数の外にオブジェクトを宣言することは役に立ちません。 console.log()は未定義です。 –

+0

その場合、まず他の関数を宣言して、マウスオーバーコールバック関数(私が推測している 'data_subset')からD3の外で宣言された関数に必要なデータを渡すのはいかがですか? – iamjpg

2

Iamjpgは、あなたの特定の質問について正しい答えを与えました。しかし、あなたはグローバル(またはCSV機能のレベル以上の1個の範囲)すべてのデータを有効にする場合、それは非常にシンプルですが、知らない場合には:

var globalData; 

d3.csv('data/cars.csv', function(data) { 

    globalData = data; 

    //the rest of your code. 

}); 
関連する問題

 関連する問題