我正在开发一个 meteor.js 应用程序,它利用 d3.js 和交叉过滤器.js创建一个交互式多图表交叉过滤仪表板。所需功能的一个重要部分是,当记录被添加到底层MongoDB集合或从中删除时,实时调整各个图表。反应性部分不是问题 -
Template.chart.rendered = function () {
Tracker.autorun(function(){
yelp_data = Yelp.find().fetch();
console.log('autorun is called');
});
}
问题是让交叉过滤器知道这些变化,我希望这将迫使各个图表重新调整以响应交叉过滤器的变化。
只需将以下行添加到自动运行中:
Tracker.autorun(function(){
yelp_data = Yelp.find().fetch();
ndx = crossfilter(yelp_data);
console.log('autorun is called');
});
没有任何区别。我还需要做什么来调整这些图表?
您需要使用 crossfilter.add 和 crossfilter.remove 在已创建的交叉过滤器中添加和删除数据。Crossfilter.remove 很烦人,因为它要求您就地更改过滤器以删除特定记录。修复此拉取请求以允许删除任意记录的待办事项列表很长。
更新交叉筛选器后,您需要触发基于交叉筛选器的任何图表的更新。如果您使用的是 dc.js,只需为您定义的任何图表组调用 dc.redrawAll。