检测交叉过滤器状态的变化
Detect changes in crossfilter state
我有一个图表组通过具有两个维度 product
和 year
的交叉过滤器链接到数据(year
、product
、sales
)。
初始状态应为 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');
而且我想进一步,如果初始过滤器不止一项,您可以引入数组比较。
我有一个图表组通过具有两个维度 product
和 year
的交叉过滤器链接到数据(year
、product
、sales
)。
初始状态应为 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');
而且我想进一步,如果初始过滤器不止一项,您可以引入数组比较。