ECharts圖形組件在1.0發佈的時候我就已經有所關注,今天在作項目的時候遇到了圖標的需求,在HT for Web上也有圖形組件的功能,可是在嘗試了下具體實現後,發現HT for Web的圖形組件是以矢量的格式來呈現的,在展示上能夠有不少的自定義和數據綁定等特性,可是其在交互的設計上就顯得比較弱勢。html
所以我就在想,是否可在項目中將ECharts圖形組件代替HT for Web的圖形組件呢,在對ECharts作了初步的瞭解後,發現二者都是基於Div和canvas的應用,因而我開始作大膽的嘗試,終於,功夫不負苦心人,下面就來看下Demo的具體展示效果吧:canvas
這是從ECharts官方Demo中拷貝下來的兩個例子,其中在佈局上用到了HT for Web的SplitView組件將兩個chart以上下比例3:2分割。echarts
光看這個例子並沒有法很直觀的看出ECharts和HT for Web應用的結合,接下來咱們來看下HT for Web拓撲圖組件與ECharts圖形組件的整合效果:佈局
在這個Demo中就整合了HT for Web的Tree組件,GraphView拓撲圖組件和ECharts圖形組件,並採用HT for Web的SplitView組件作佈局。this
說了這麼多,如今咱們來看下具體代碼的實現吧:spa
ht.Chart = function(option){ var self = this, view = self._view = document.createElement('div'); view.style.position = 'absolute'; view.style.setProperty('box-sizing', 'border-box', null); self._option = option; }; ht.Default.def('ht.Chart', Object, { ms_v: 1, ms_fire: 1, ms_ac: ['chart', 'option', 'isFirst'], validateImpl: function(){ var self = this, chart = self._chart; if(!chart){ chart = self._chart = echarts.init(self.getView()); chart.setOption(self._option); } chart.resize(); } });
你沒有看錯,最核心的代碼就這些,下面就來介紹下代碼設計的具體邏輯:設計
這串代碼其實很好理解,就是在系統中定義ht.Chart這個類,而後讓類具備view和fire的特性,最後在validateImpl方法中具體實現chart的初始化和渲染。具體的使用就是經過new關鍵字來建立ht.Chart的實例,並傳入標準的ECharts配置參數,或在new的時候不傳參,在建立對象後,經過setOption(option)方法來設置。code
最後我爲你們錄製了具體頁面的操做效果視頻,歡迎你們欣賞。視頻