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

Detect changes in crossfilter state

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

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

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

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

正如我在上面评论的那样,我认为这个问题在 dc.js 级别比在 crossfilter 级别处理得更好。据我所知,没有任何方法可以跟踪对交叉过滤器的更改,而且无论如何,您想与特定状态进行比较,而不仅仅是查看是否进行了任何更改。

我会这样处理:对于每个要显示更改的图表,在某处为更改指示器创建一个 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');

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