From 7893d129dbd92e86d15a24ac364b0d480417b9e7 Mon Sep 17 00:00:00 2001 From: kener Date: Mon, 29 Jul 2013 21:00:23 +0800 Subject: [PATCH] syncBackupData bug fixed~ --- src/chart/island.js | 5 ++++ src/chart/line.js | 4 +-- src/component/dataView.js | 7 +++--- src/component/dataZoom.js | 47 ++++++++++++++++++++++++++++++++++++ src/echarts.js | 51 ++++++++++++++++++++++++++++++++++++--- 5 files changed, 105 insertions(+), 9 deletions(-) diff --git a/src/chart/island.js b/src/chart/island.js index eb91ec5ba..c0ea433c0 100644 --- a/src/chart/island.js +++ b/src/chart/island.js @@ -72,6 +72,10 @@ define(function (require) { zr.addShape(self.shapeList[i]); } } + + function getOption() { + return option; + } function resize() { var newWidth = zr.getWidth(); @@ -230,6 +234,7 @@ define(function (require) { self.render = render; self.resize = resize; + self.getOption = getOption; self.add = add; self.del = del; self.ondrop = ondrop; diff --git a/src/chart/line.js b/src/chart/line.js index c3c246a0a..430757b07 100644 --- a/src/chart/line.js +++ b/src/chart/line.js @@ -302,7 +302,7 @@ define(function(require) { [data, serie], 'symbolSize' ); - lastYP += symbolSize * 2 + 2; + lastYP += symbolSize * 2 + 5; y = lastYP; self.shapeList.push(_getCalculableItem( seriesIndex, i, categoryAxis.getNameByIndex(i), @@ -422,7 +422,7 @@ define(function(require) { [data, serie], 'symbolSize' ); - lastXP -= symbolSize * 2 + 2; + lastXP -= symbolSize * 2 + 5; x = lastXP; self.shapeList.push(_getCalculableItem( seriesIndex, i, categoryAxis.getNameByIndex(i), diff --git a/src/component/dataView.js b/src/component/dataView.js index 486de2e04..aa00b42a0 100644 --- a/src/component/dataView.js +++ b/src/component/dataView.js @@ -234,10 +234,12 @@ define(function (require) { setTimeout( function(){ messageCenter && messageCenter.dispatch( - ecConfig.EVENT.DATA_VIEW_CHANGED + ecConfig.EVENT.DATA_VIEW_CHANGED, + null, + {option : option} ); }, - document.createElement('canvas').getContext ? 800 : 100 + !G_vmlCanvasManager ? 800 : 100 ); } @@ -340,7 +342,6 @@ define(function (require) { } contentIdx++; } - } } diff --git a/src/component/dataZoom.js b/src/component/dataZoom.js index 12f3fc16a..c747981ac 100644 --- a/src/component/dataZoom.js +++ b/src/component/dataZoom.js @@ -159,6 +159,13 @@ define(function (require) { // 找到缩放控制的所有series for (var i = 0, l = series.length; i < l; i++) { + if (series[i].type != ecConfig.CHART_TYPE_LINE + && series[i].type != ecConfig.CHART_TYPE_BAR + && series[i].type != ecConfig.CHART_TYPE_SCATTER + && series[i].type != ecConfig.CHART_TYPE_K + ) { + continue; + } for (var j = 0, k = xAxisIndex.length; j < k; j++) { if (xAxisIndex[j] == (series[i].xAxisIndex || 0)) { zoomSeriesIndex.push(i); @@ -905,6 +912,45 @@ define(function (require) { _syncData(true); return _zoom; } + + function syncBackupData(curOption, optionBackup) { + var start; + var target = _originalData['series']; + var curSeries = curOption.series; + var curData; + for (var i = 0, l = curSeries.length; i < l; i++) { + curData = curSeries[i].data; + if (target[i]) { + // dataZoom接管的 + start = Math.floor(_zoom.start / 100 * target[i].length); + } + else { + // 非dataZoom接管 + start = 0; + } + for (var j = 0, k = curData.length; j < k; j++) { + if (typeof optionBackup.series[i].data[j + start].value + != 'undefined' + ) { + optionBackup.series[i].data[j + start].value + = curData[j].value; + if (target[i]) { + // 同步内部备份 + target[i][j + start].value + = curData[j].value; + } + } + else { + optionBackup.series[i].data[j + start] = curData[j]; + if (target[i]) { + // 同步内部备份 + target[i][j + start] + = curData[j]; + } + } + } + } + } function init(newOption) { option = newOption; @@ -933,6 +979,7 @@ define(function (require) { } self.init = init; + self.syncBackupData = syncBackupData; self.absoluteZoom = absoluteZoom; self.rectZoom = rectZoom; self.ondragend = ondragend; diff --git a/src/echarts.js b/src/echarts.js index fe2191f54..31005f85a 100644 --- a/src/echarts.js +++ b/src/echarts.js @@ -29,7 +29,8 @@ define(function(require) { var self = this; var _zr; var _option; - var _optionBackup; + var _optionBackup; // for各种change和zoom + var _optionRestore; // for restore; var _chartList; // 图表实例 var _messageCenter; // Echarts层的消息中心,做zrender原始事件转换 @@ -249,6 +250,7 @@ define(function(require) { // 发生过重计算 if (_status.needRefresh) { + _syncBackupData(_island.getOption()); _messageCenter.dispatch( ecConfig.EVENT.DATA_CHANGED, param.event, @@ -338,9 +340,12 @@ define(function(require) { _render(magicOption); } - function _ondataViewChanged() { + function _ondataViewChanged(param) { + _syncBackupData(param.option); _messageCenter.dispatch( - ecConfig.EVENT.DATA_CHANGED + ecConfig.EVENT.DATA_CHANGED, + null, + param ); _messageCenter.dispatch(ecConfig.EVENT.REFRESH); } @@ -353,6 +358,42 @@ define(function(require) { refresh(); } + function _syncBackupData(curOption) { + if ((curOption.dataZoom && curOption.dataZoom.show) + || (curOption.toolbox + && curOption.toolbox.show + && curOption.toolbox.feature + && curOption.toolbox.feature.dataZoom + ) + ) { + // 有dataZoom就dataZoom做同步 + for (var i = 0, l = _chartList.length; i < l; i++) { + if (_chartList[i].type == ecConfig.COMPONENT_TYPE_DATAZOOM + ) { + _chartList[i].syncBackupData(curOption, _optionBackup); + return; + } + } + } + + // 没有就ECharts做 + var curSeries = curOption.series; + var curData; + for (var i = 0, l = curSeries.length; i < l; i++) { + curData = curSeries[i].data; + for (var j = 0, k = curData.length; j < k; j++) { + if (typeof _optionBackup.series[i].data[j].value + != 'undefined' + ) { + _optionBackup.series[i].data[j].value + = curData[j].value; + } + else { + _optionBackup.series[i].data[j] = curData[j]; + } + } + } + } /** * 打包Echarts层的事件附件 */ @@ -512,7 +553,8 @@ define(function(require) { function restore() { var zrUtil = require('zrender/tool/util'); _selectedMap = {}; - _option = zrUtil.clone(_optionBackup); + _optionBackup = zrUtil.clone(_optionRestore); + _option = zrUtil.clone(_optionRestore); _island.clear(); _toolbox.reset(_option); _render(_option); @@ -601,6 +643,7 @@ define(function(require) { }; _optionBackup = zrUtil.clone(_option); + _optionRestore = zrUtil.clone(_option); _selectedMap = {}; _island.clear(); -- GitLab