我正在尝试使用jqueryslider修改Mike Bostock的chloropeth地图,而不是
queue()
.defer(d3.json, "/mbostock/raw/4090846/us.json")
.defer(d3.tsv, "unemployment.tsv", function(d) { rateById.set(d.id, +d.rate); })
.await(ready);
我有
function refresh(p) {
queue()
.defer(d3.json, "us.json")
.defer(d3.csv, "unemployment2.csv", function (d,p) {
rateById.set(d.id, +p);
})
.await(ready);
console.log(p);
}
我正在使用下面的代码
捕获滑块中的值$(function () {
$("#slider").slider({
value: 100,
min: 2000,
max: 2013,
step: 1,
slide: function (event, ui) {
$("#year").val(ui.value);
refresh("+d.rate" + ui.value);
}
});
$("#year").val($("#slider").slider("value"));
});
当我将p写入控制台时,它按照我的要求输出为d.rate2013,d.rate2012等,但该值不会进入rateById.set。我也得到了一个氯通道图,当我向滑块前进时,线逐渐消失。
答案 0 :(得分:1)
你通过在函数中再次声明它来隐藏p
,即它应该是
.defer(d3.csv, "unemployment2.csv", function (d) {
rateById.set(d.id, +p);
})
您还想传入列的名称,而不是javascript代码。就是这样做
refresh("rate" + ui.value);
然后
.defer(d3.csv, "unemployment2.csv", function (d) {
rateById.set(d.id, +d[p]);
})
总的来说,每次移动滑块时都不需要重新加载数据,只需要迭代数据并将rateById
设置为适当的值。