javascript - 在crossfilter dc js中应用除Others之外的多个过滤器

标签 javascript d3.js dc.js crossfilter

我有一个维度,用户可以在该维度上使用大约 50 个不同的值进行过滤(通过单击与每个过滤器对应的元素)。

显示所有五十个过滤器(元素)是不可能的。 所以我展示了前 5 个过滤器,并使用 dc.js 中的 chart.rowsCap(5) 方法将其余部分放在 Others 中。

用户可以选择多个过滤器,但它也允许选择其他

我想要的是每当选择其他时,其他过滤器应该被删除,反之亦然。

我尝试了几件事,但到目前为止没有运气。 这是我在 on('filtered', func) 监听器中尝试的

chart.on('filtered', function(chart, filter){
    if(filter instanceof Array){
        if(chart.filters().indexOf("Others") !== -1) {
            chart.filter(null);
            chart.filter(filter);
        }
    } else if(filter == "Others") {
        if(chart.filters().indexOf("Others") !== -1 && chart.filters().length > 1){
            chart.filter(null);
            chart.filter(filter);
        }
    } else {
        if(chart.filters().indexOf("Others") !== -1){
        chart.filter(null);
        chart.filter(filter);
    }
}

感谢任何帮助。

最佳答案

我认为您不想为此使用监听器;听众是被动的,并且在这个过程中处于后期。

相反,我认为您最好的选择是在事件级别控制行为(尽管有一些提议使点击过滤器行为更易于配置)。

尝试这样的事情:

var oc = chart.onClick;
chart.onClick = function(d) { chart.filter(null); oc.call(chart, d); }

这只是在应用另一个过滤器之前清除过滤器,因此它会破坏切换并为您提供单一元素选择。我不确定这是否能回答您的整个问题,但希望它能让您顺利上路。

编辑:这里有一个更复杂的 onClick,它使 Others 与普通切片互斥,但在其他方面保留切换。

chart.onClick = function (d) {
    var had_others = chart.filters().indexOf("Others")>=0;
    if(d.key === "Others") {
        chart.filter(null); 
        if(!had_others)
            oc.call(chart, d); 
        else chart.redrawGroup(); 
     } else { 
         if(had_others) chart.filter(null); 
         oc.call(chart, d); 
     } 
}

关于javascript - 在crossfilter dc js中应用除Others之外的多个过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25996357/

相关文章:

javascript - 动态更改图表上的 Sprite 文本

javascript - 使用 HTML Unicode 表达式的 D3 数字格式

d3.js - 使用 d3 扣除文本元素的高度

javascript - d3.js 按索引在特定点向折线图添加垂直线

javascript - dc.js 将维度数据以json 格式发送到node.js 服务器,然后使用java 处理数据

javascript - 将类对象传递给 ReactJS 组件

javascript - 检查鼠标悬停在哪个元素上以控制另一个 div 的可见性

javascript - 未接收动态生成的表单数据

javascript - 单独格式化 D3 中的多个轴

javascript - D3.js/Dc.js 折线图中单线的不同颜色线段