我可以将 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
});
});
答案 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;
}