From d6eca3a51b52f511502c6d22c25f3213d3c18bf3 Mon Sep 17 00:00:00 2001 From: sushuang Date: Fri, 23 Feb 2018 20:43:24 +0800 Subject: [PATCH] Fix that appendData cause series color changed if series name not specified. --- src/component/legend/LegendModel.js | 12 +-- src/model/Series.js | 5 +- src/model/mixin/colorPalette.js | 7 ++ src/util/model.js | 18 ++-- src/visual/seriesColor.js | 2 +- test/appendData.html | 131 +++++++++++++++++++++------- test/lib/testHelper.js | 2 +- 7 files changed, 131 insertions(+), 46 deletions(-) diff --git a/src/component/legend/LegendModel.js b/src/component/legend/LegendModel.js index 914a5e038..d547c86ec 100644 --- a/src/component/legend/LegendModel.js +++ b/src/component/legend/LegendModel.js @@ -1,7 +1,7 @@ import * as echarts from '../../echarts'; import * as zrUtil from 'zrender/src/core/util'; import Model from '../../model/Model'; -import {DEFAULT_COMPONENT_NAME} from '../../util/model'; +import {isNameSpecified} from '../../util/model'; var LegendModel = echarts.extendComponentModel({ @@ -61,7 +61,7 @@ var LegendModel = echarts.extendComponentModel({ ecModel.eachRawSeries(function (seriesModel) { var seriesName = seriesModel.name; availableNames.push(seriesName); - var potentialSeriesName; + var isPotential; if (seriesModel.legendDataProvider) { var data = seriesModel.legendDataProvider(); @@ -75,15 +75,15 @@ var LegendModel = echarts.extendComponentModel({ potentialData = potentialData.concat(names); } else { - potentialSeriesName = seriesName; + isPotential = true; } } else { - potentialSeriesName = seriesName; + isPotential = true; } - if (potentialSeriesName && potentialSeriesName !== DEFAULT_COMPONENT_NAME) { - potentialData.push(potentialSeriesName); + if (isPotential && isNameSpecified(seriesModel)) { + potentialData.push(seriesModel.name); } }); diff --git a/src/model/Series.js b/src/model/Series.js index 410639c5e..da624a7f0 100644 --- a/src/model/Series.js +++ b/src/model/Series.js @@ -357,8 +357,7 @@ var SeriesModel = ComponentModel.extend({ var name = data.getName(dataIndex); var seriesName = this.name; - if (seriesName === modelUtil.DEFAULT_COMPONENT_NAME) { - // Not show '-' + if (!modelUtil.isNameSpecified(this)) { seriesName = ''; } seriesName = seriesName @@ -481,7 +480,7 @@ function autoSeriesName(seriesModel) { // User specified name has higher priority, otherwise it may cause // series can not be queried unexpectedly. var name = seriesModel.name; - if (modelUtil.DEFAULT_COMPONENT_NAME === name) { + if (!modelUtil.isNameSpecified(seriesModel)) { seriesModel.name = getSeriesAutoName(seriesModel) || name; } } diff --git a/src/model/mixin/colorPalette.js b/src/model/mixin/colorPalette.js index 25996a43d..75f41290c 100644 --- a/src/model/mixin/colorPalette.js +++ b/src/model/mixin/colorPalette.js @@ -19,6 +19,13 @@ export default { inner(this).colorNameMap = {}; }, + /** + * @param {string} name MUST NOT be null/undefined. Otherwise call this function + * twise with the same parameters will get different result. + * @param {Object} [scope=this] + * @param {Object} [requestColorNum] + * @return {string} color string. + */ getColorFromPalette: function (name, scope, requestColorNum) { scope = scope || this; var scopeFields = inner(scope); diff --git a/src/util/model.js b/src/util/model.js index 8a79f4063..cbf4498e8 100644 --- a/src/util/model.js +++ b/src/util/model.js @@ -5,11 +5,11 @@ var isObject = zrUtil.isObject; var isArray = zrUtil.isArray; /** - * name may be displayed on screen, so use '-'. - * But we should make sure it is not duplicated - * with user specified name, so use '\0'; + * Make the name displayable. But we should + * make sure it is not duplicated with user + * specified name, so use '\0'; */ -export var DEFAULT_COMPONENT_NAME = '\0-'; +var DUMMY_COMPONENT_NAME_PREFIX = 'series\0'; /** * If value is not array, then translate it to array. @@ -248,7 +248,9 @@ export function makeIdAndName(mapResult) { ? opt.name + '' : existCpt ? existCpt.name - : DEFAULT_COMPONENT_NAME; + // Avoid diffferent series has the same name, + // because name may be used like in color pallet. + : DUMMY_COMPONENT_NAME_PREFIX + index; if (existCpt) { keyInfo.id = existCpt.id; @@ -273,6 +275,12 @@ export function makeIdAndName(mapResult) { }); } +export function isNameSpecified(componentModel) { + var name = componentModel.name; + // Is specified when `indexOf` get -1 or > 0. + return !!(name && name.indexOf(DUMMY_COMPONENT_NAME_PREFIX)); +} + /** * @public * @param {Object} cptOption diff --git a/src/visual/seriesColor.js b/src/visual/seriesColor.js index e3a48d2c3..60880a308 100644 --- a/src/visual/seriesColor.js +++ b/src/visual/seriesColor.js @@ -9,7 +9,7 @@ export default { var color = seriesModel.get(colorAccessPath) // Set in itemStyle || seriesModel.getColorFromPalette( // TODO series count changed. - seriesModel.get('name'), null, ecModel.getSeriesCount() + seriesModel.name, null, ecModel.getSeriesCount() ); // Default color // FIXME Set color function or use the platte color diff --git a/test/appendData.html b/test/appendData.html index 852befe3b..99752cb3d 100644 --- a/test/appendData.html +++ b/test/appendData.html @@ -20,7 +20,8 @@
- +
+
+ + + + + + +