我正在尝试通过在下拉列表中选择值来过滤我的行图。
为此,我创建了一个维度并根据下拉列表中的选定值对该维度应用过滤器。
行图必须显示平均值,为此我创建了 ReduceAdd/Remove/Initial 函数。
平均值按预期工作。
但是,当我过滤用于下拉列表的维度时,它似乎向我的行图中添加了重复的值。
示例代码:http://jsfiddle.net/sy9xA/4/
var dropDownFilterDimension;
function ReduceAdd(p, v) {
var value = v.value;
++p.countAvg;
p.totalAvg += value;
return p;
}
function ReduceRemove(p, v) {
var value = v.value
--p.countAvg;
p.totalAvg -= value;
return p;
}
function ReduceInitial() {
return {countAvg: 0, totalAvg: 0};
}
function filterDropdown(dropDownID){
dropDown = document.getElementById(dropDownID);
dropDownFilterDimension.filterAll();
values = $(dropDown).val();
if( values != null ){
dropDownFilterDimension.filter(function(d) { if (values.indexOf(d) > -1) {return d;} });
}
dc.redrawAll();
}
Here for example, when "banana"is selected for filtering. ReduceRemove 为所有未选择的值调用,但此外,ReduceAdd 为香蕉调用(即使它已经在其中)。
所以现在在选择香蕉后,选择了苹果。香蕉还是有一定的值(value)的。
有人可以解释为什么会这样吗?或者我怎样才能避免这种情况发生?
提前致谢!
罗伯特
最佳答案
我还没有完全理解你在做什么,因为 jsfddle 只显示 js。
我可以告诉我我是怎么做的:
d3.select('#myDropDown')
.on('改变', function(){
chartDim.filter(this.value)
dc.redrawAll();
})
dc.redrawAll() 的调用不仅会更新图表,还会更新averageGroup,一切都应该没问题。如果 dropDown 有自己的维度,只需过滤这个而不是 chartDim
关于dc.js - 使用下拉列表过滤交叉过滤器维度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23676236/