是否有可能在一次直流图表上添加一组过滤器? 例如,说我有一个饼图,以及过滤器值的阵列应用。
var osChart = dc.pieChart('#oschart');
并设置过滤器的输入,说
var filters = ["linux", "mac osx", "windows", "solaris"]
我如何可以使用过滤器,以便仅生成一个“过滤”事件? 我可以这样做
for (var i=0; i < filters.length; i++) {
osChart.filter(filters[i]);
}
然而,将产生4 filtered
事件。 我申请基于什么用户键入的文本框的过滤器。 当应用过滤器,我想提出一些Ajax调用,这往往如果我申请的过滤器逐个放慢。 我能避免额外的Ajax调用,如果过滤器可以设置一次。
crossfilter有一个函数filterFunction
可以得到这个任务完成,但我不知道我怎么可以应用直流图表上。 应用filterFunction
上osChart.dimension()
没有工作。 随着最新发布的DC,我见过这样一些功能addFilterHandler
和removeFilterHandler
但是我无法测试,并立即部署该版本。
我有什么其他选择?
从看代码,这多少有些令人费解,你可以通过数组另一个数组里面 .filter()
或无证但unmagical .replaceFilter()
而没有性能损失,因为它会调用之前应用所有过滤器该filtered
事件。
从最新的.filter()
源,它使用处理器,但具有相同的行为:
if (_ instanceof Array && _[0] instanceof Array && !_.isFiltered) {
_[0].forEach(function (d) {
if (_chart.hasFilter(d)) {
_removeFilterHandler(_filters, d);
} else {
_addFilterHandler(_filters, d);
}
});
} else if (_ === null) {
_filters = _resetFilterHandler(_filters);
} else {
if (_chart.hasFilter(_)) {
_removeFilterHandler(_filters, _);
} else {
_addFilterHandler(_filters, _);
}
}
applyFilters();
_chart._invokeFilteredListener(_);
因此,如果它发现不具有阵列isFiltered
方法以及数组的第一元素也是一个数组,它会遍历嵌套数组中的元素。
例如,通过[["linux", "mac osx", "windows", "solaris"]]
就这些四个值进行过滤。 (感谢@marcin澄清!)