这与dc.js - how to create a row chart from multiple columns类似,但我想更进一步,并在点击行时启用过滤。
回答问题"它应该过滤什么?" - 仅显示值为>的记录例如,当Row' a'单击它将仅显示具有>值的记录。因此,Type饼图将更改为foo:1,bar:2
我想我必须覆盖onClick方法?但我不确定如何。
chart.onClick = function(d) {}
来自上述问题答案的jsfiddle - http://jsfiddle.net/gordonwoodhull/37uET/6/
有什么建议吗?
谢谢!
答案 0 :(得分:1)
好的,这是一个解决方案,如果记录的值为> 0表示任何所选行,包括该记录。正如@Ethan所说,这是定义过滤器处理程序的问题:
sidewaysRow.filterHandler(function(dim, filters) {
if(filters && filters.length)
dim.filterFunction(function(r) {
return filters.some(function(c) {
return r[c] > 0;
});
})
else dim.filterAll();
return filters;
});
此外,由于filterFunction只能访问密钥,因此我们将整个记录作为密钥传递。在现实世界中,这并没有多大意义。但由于我们已经横向使用横向滤波器,因此可能没问题:
var dim = ndx.dimension(function(r) { return r; });
小提琴的新版本:http://jsfiddle.net/gordonwoodhull/37uET/18/
BTW听起来你想一次只选择一行。以下是如何做到这一点:
sidewaysRow.addFilterHandler(function(filters, filter) {
filters.length = 0;
filters[0] = filter;
return filters;
})
(这在开发分支的dc 2.1中会更简单,其中图表使用过滤处理程序的结果,而不是要求您修改过滤器;正文变为return [filter];
)