儘管可以使用dc.js和d3.js互換和dc.js是故意「泄漏抽象」,有些事情會更好,如果你做他們的慣用dc.js方式。
我有兩個建議:
- 應用您提示響應dc.js事件,以便創建新的圖形對象時,他們將得到重新應用(或重新創建)。
- 修改圖表時使用chart.selectAll而不是
d3.selectAll
。
好的,#2實際上對這個問題沒有任何影響,但它確實有助於更好地選擇範圍,這樣它們很難錯過圖表或意外修改頁面中其他地方的東西。
實施#1看起來是這樣的:
month_chart.on('pretransition', function(chart) {
chart.selectAll('rect.bar').call(month_tip)
.on('mouseover', month_tip.show).on('mouseout', month_tip.hide);
});
loc_chart1.on('pretransition', function(chart) {
chart.selectAll('g.row').call(loc_tip)
.on('mouseover', loc_tip.show).on('mouseout', loc_tip.hide);
});
的轉變前的事件觸發後立即渲染或重繪,所以它通常是操縱DC的元素的最佳時刻。比在全球範圍內運行代碼要好得多。我喜歡設置所有內容,然後致電dc.renderAll()
,然後允許渲染和重繪以後再照顧自己。
特別是,當這些條被重新添加時,當remove_empty_bins
停止刪除它們時,這些事件會將它們提取並重新提示它們。
你的小提琴的叉子:https://jsfiddle.net/gordonwoodhull/5feL3gko/4/