对于问题的第一部分,您正在查看的功能称为“节流”。有一个implementation of it in underscore和lodash等地。
(不要使用dc.events.trigger
,because it's a debounce)
至于绘图只是一些图表,你可以有你的“过滤器图”设定的crossfilter维度筛选,然后重绘只是一些图表,并然后等待扼杀事件重绘其余部分,因为redrawAll
确实只是遍历所有图表。
虽然没有内置的管理这些类型的子组,但您必须保留自己的图表列表。
I.e.像(可能改写(munging)D3和jQuery语法这里,但你的想法):
function fast_redraws() {
[chart1,chart2,chart3].forEach(function(c) { c.redraw(); });
}
function slow_redraws() {
[chart4,chart5,chart6].forEach(function(c) { c.redraw(); });
}
var throttle_slow_redraws = _.throttle(slow_redraws, 100, {leading: false});
input.on('change', function() {
dimension.filter(input.val());
fast_redraws();
throttle_slow_redraws(); // throttling makes this okay
})
是的,这将是巨大的,有一个简单的输入控件像这样dc.js - 我不知道但是,如何以一般方式处理快速/慢速重绘。它可以打包答案like the responses to this issue的一些智慧。
快与慢:默认情况下,调用dc.redrawAll()和on(“change”)事件(可选)用于执行fast_redraw(而不是限制) – Xavier
嗯。也许如果图表注册表只是一个事件调度器,[在这里暗示](https://github.com/dc-js/dc.js/issues/910),那么它会更容易?那么,这真的不是讨论未来设计的地方。如果您有想法,请在问题或用户组中提出。 – Gordon
好的,PR在你的路上,试图添加意义测试,但可能会先分享代码 – Xavier