2017-04-07 51 views
1

我有很多圖表,爲了簡單起見,需要this example on jsfiddle,其中有一個畫筆圖,一個條形圖以時間爲關鍵字和一個行圖鍵入一些類別。另外,我使用d3-tip庫作爲工具提示(在上面的鏈接中,我的提示非常簡化)。dc-js圖表上的d3-tip在0值組上過濾時消失

爲了避免在rowChart中創建條形行,我使用了假羣組,如dc-js(以及here)的常見問題所述。

假組運行良好,不在行圖上顯示C類別。但是,如果我用0數據刷幾個月,當我重置過濾器(只需單擊brushon圖表上的已過濾區域的任何位置)時,行圖上的d3-tip就會消失。

請注意,如果組的創建沒有假分組函數,則不會出現此問題。

  • 任何解釋爲什麼發生這種情況?
  • 如何避免這種情況(不丟失remove_empty_bins)?

回答

2

儘管可以使用dc.js和d3.js互換和dc.js是故意「泄漏抽象」,有些事情會更好,如果你做他們的慣用dc.js方式。

我有兩個建議:

  1. 應用您提示響應dc.js事件,以便創建新的圖形對象時,他們將得到重新應用(或重新創建)。
  2. 修改圖表時使用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/