ExtJS 組件渲染後獲取其 DOM 容器,作為 ECharts 初始化的 `dom` 參數。關鍵點:容器必須已佈局完成、有具體寬高。
Ext.define('MyApp.view.ChartPanel', {
extend: 'Ext.panel.Panel',
alias: 'widget.chartpanel',
title: 'ECharts in ExtJS',
layout: 'fit', // 關鍵:讓內部容器撐滿面板
items: [{
xtype: 'component',
itemId: 'chartContainer',
autoEl: { tag: 'div' }, // 生成一個 div 作為 ECharts 掛載點
// 也可用 html: '<div id="chart"></div>' 但需手動管理 ID
}],
listeners: {
afterrender: function(panel) {
// 1. 獲取容器 DOM
var container = panel.down('#chartContainer').getEl().dom;
// 2. 初始化 ECharts
var chart = echarts.init(container);
// 3. 配置選項
var option = {
title: { text: 'ExtJS + ECharts Demo' },
tooltip: {},
xAxis: { data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'] },
yAxis: {},
series: [{ name: 'Score', type: 'bar', data: [120, 200, 150, 80, 70, 110, 130] }]
};
chart.setOption(option);
// 4. 面板 resize 時重繪圖表
panel.on('resize', function() {
chart.resize();
});
// 5. 面板銷毀時釋放
panel.on('destroy', function() {
chart.dispose();
});
}
}
});
ExtJS + ECharts 核心是「Ext 負責佈局生命週期,ECharts 負責渲染」。在 `afterrender` 獲取 DOM、初始化、綁定 `resize`/`destroy` 事件即可穩健集成。