检测交叉滤波器状态的变化

时间:2019-02-13 22:15:56

标签: dc.js crossfilter

我有一个图表组,该组通过具有两个维度yearproduct的交叉过滤器链接到数据(salesproductyear)。

初始状态应为product ='A'和year = 2019。

当用户通过过滤图表更改此状态时,星号(*)应该出现在表示图表已更改的位置。

如何捕获交叉过滤器状态的变化?

1 个答案:

答案 0 :(得分:1)

如上所述,我认为在dc.js级别比在交叉过滤器级别更好地解决此问题。我知道没有任何方法可以跟踪对交叉过滤器的更改,而且无论如何,您都想与某个状态进行比较,而不仅仅是查看是否进行了任何更改。

我会这样处理:对于每个要显示更改的图表,在更改指示器的某个位置创建一个div。然后查看该图表上的过滤器,看看它们是否与您的默认设置不同:

chart.on('filtered', function() {
    var changed = chart.filters().length !== 1 || chart.filters()[0] !== 'A';
    d3.select('#product-chart-changed').text(changed ? '*' : '');
});

这可以通过将其放入函数中来概括,例如:

function show_changes(chart, indicator_sel, initial) {
    chart.on('filtered', function() {
        var changed = chart.filters().length !== 1 || chart.filters()[0] !== initial;
        d3.select(indicator_sel).text(changed ? '*' : '');
    });
}
show_changes(chart, '#product-chart-changed', 'A');

我想进一步,如果初始过滤器不止一项,则可以引入数组比较。