2016-04-06 3 views
0

Могу ли я сделать data_subset (pc0.on («кисть», функция (data_subset)) в качестве глобальной переменной? Я хотел бы использовать отфильтрованные данные после чистки события . в какой-то другой код вне этой функции Это мой первый проект с d3.js (или JavaScript), поэтому я прошу прощения, если вопрос не делает много смыслапреобразовать локальную переменную глобальной в 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

Как говорится в комментарии Кальвина Бельдена, вы можете прикрепить любые вещь к объекту 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

Если это так, почему бы не объявить вашу другую функцию первым, а затем передать любые данные, которые вы хотите, из функции обратного вызова mouseover ('data_subset', которую я предполагаю) для этой объявленной функции вне D3? – iamjpg

2

Iamjpg дал вам правильный ответ относительно вашего конкретного вопроса. Однако, в случае, если вы не знаете, если вы хотите, чтобы включить все данные глобальные (или одна сфера выше уровня функции CSV), это очень просто:

var globalData; 

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

    globalData = data; 

    //the rest of your code. 

}); 
Смежные вопросы