對於問題的第一部分,您正在查看的功能稱爲「節流」。有一個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