在d3.js

时间:2016-04-06 23:57:49

标签: javascript d3.js

我可以将 data_subset pc0.on(“brush”,function(data_subset))作为全局变量吗?  我想在刷新事件之后使用此函数之外的其他一些代码中的过滤数据。 这是我的第一个使用d3.js(或JavaScript)的项目,所以如果这个问题没有多大意义,我很抱歉。

示例代码:

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
          });          

      });

2 个答案:

答案 0 :(得分:2)

Iamjpg为您提供了有关您具体问题的正确答案。但是,如果你不知道,如果你想将所有数据全局化(或者一个范围高于CSV函数的水平),那就非常简单了:

var globalData;  

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

  globalData = data;  

  //the rest of your code.  

});  

答案 1 :(得分: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;
}