如何使用 .remove Filter Handler 禁用气泡图上的过滤器?

How can I disable filters on bubbleChart using .removeFilterHandler?

我需要抑制当用户单击 bubbleChart 中的圆圈时发生的过滤,但如果可能,请保留 'selected' 和 'deselected' 的 class 分配。如果不可能,我想用我自己的脚本替换默认的点击行为。

根据 API 文档,我可以在 bubbleChart 上使用 .removeFilterHandler 或 .resetFilterHandler,因为图表类型依赖于 baseMixin。

https://github.com/dc-js/dc.js/blob/master/web/docs/api-latest.md#dc.baseMixin+removeFilterHandler

但它不起作用。当我单击 bubbleChart 中的圆圈时,同一仪表板中的直方图会过滤。我希望这会停止。谁能看到我做错了什么?我正在使用 DC.js v2.0.2。谢谢

  var rfh = bubbleChart.resetFilterHandler();

  bubbleChart.width(738)
          .height(315)
          .margins({left:40,right:30,top:15,bottom:30})
          .dimension(idDimBubble)
          .group(idGrpBubble)
          .clipPadding(10)
          .renderLabel(false)
          .keyAccessor(function (p) { return p.value[selectArrays[0][1]] / p.value.name.length; })
          .valueAccessor(function (p) { return p.value[selectArrays[0][0]] / p.value.name.length; })
          .radiusValueAccessor(function (p) { return p.value['revenue']+1; })
          .title(function(d){
            var tempIndex = filters[0].indexOf(window.gran);
            var tempString = filters[1][tempIndex]+': ' + d.value.what;
            var str = '';
            if (window.gran!='company') {
              str = 'Avg ';
            }
            tempString += '\n'+str+selectArrays[1][0]+': '+d3.format('.3s')(Math.round(d.value[selectArrays[0][0]] / d.value.name.length));
            tempString += '\n'+str+selectArrays[1][1]+': '+d3.format('.3s')(Math.round(d.value[selectArrays[0][1]] / d.value.name.length));

            return tempString;
          })
          .minRadius(3)
          .maxBubbleRelativeSize(0.005)
          .x(d3.scale.linear().domain([0, selectArrays[3][1]]))
          .y(d3.scale.linear().domain([0, selectArrays[3][0]]))
          .r(d3.scale.linear().domain([0, 5000]))
          .renderHorizontalGridLines(true)
          .renderVerticalGridLines(true)
          .removeFilterHandler(function (filters, filter) {
              console.log(filters);//doesn't output anything
              for (var i = 0; i < filters.length; i++) {
                  if (filters[i] <= filter && filters[i] >= filter) {
                      filters.splice(i, 1);
                      break;
                  }
              }
              return filters;
          });

这里有几个函数的名称不明确。

removeFilterHandler 本身不会删除过滤器;当用户操作导致删除过滤器时调用它。它只是在应用之前更改列表。

您想要做的是保留过滤器的添加和删除方式,但更改(禁用)它们应用于维度的方式。

这就是 filterHandler 的用途。 Similar name, different functionality. 也许应该叫 applyFiltersHandler。或者什么的。

您可以将其实现为传递:

chart.filterHandler(function (dimension, filters) {
    return filters;
});

它保留过滤器列表,但不会以这种方式将它们应用到维度。