提交 0cfd16c0 编写于 作者: S sushuang

Fix auto legend.

上级 3aacd5fb
...@@ -104,7 +104,7 @@ var MapSeries = SeriesModel.extend({ ...@@ -104,7 +104,7 @@ var MapSeries = SeriesModel.extend({
var otherIndex = seriesGroup[i].originalData.indexOfName(name); var otherIndex = seriesGroup[i].originalData.indexOfName(name);
if (!isNaN(seriesGroup[i].originalData.get('value', otherIndex))) { if (!isNaN(seriesGroup[i].originalData.get('value', otherIndex))) {
seriesNames.push( seriesNames.push(
encodeHTML(seriesGroup[i].getDisplayName()) encodeHTML(seriesGroup[i].name)
); );
} }
} }
......
...@@ -33,7 +33,7 @@ var RadarSeries = SeriesModel.extend({ ...@@ -33,7 +33,7 @@ var RadarSeries = SeriesModel.extend({
var coordSys = this.coordinateSystem; var coordSys = this.coordinateSystem;
var indicatorAxes = coordSys.getIndicatorAxes(); var indicatorAxes = coordSys.getIndicatorAxes();
var name = this.getData().getName(dataIndex); var name = this.getData().getName(dataIndex);
return encodeHTML(name === '' ? this.getDisplayName() : name) + '<br/>' return encodeHTML(name === '' ? this.name : name) + '<br/>'
+ zrUtil.map(indicatorAxes, function (axis, idx) { + zrUtil.map(indicatorAxes, function (axis, idx) {
return encodeHTML(axis.name + ' : ' + value[idx]); return encodeHTML(axis.name + ' : ' + value[idx]);
}).join('<br />'); }).join('<br />');
......
import * as echarts from '../../echarts'; import * as echarts from '../../echarts';
import * as zrUtil from 'zrender/src/core/util'; import * as zrUtil from 'zrender/src/core/util';
import Model from '../../model/Model'; import Model from '../../model/Model';
import {DEFAULT_COMPONENT_NAME} from '../../util/model';
var LegendModel = echarts.extendComponentModel({ var LegendModel = echarts.extendComponentModel({
...@@ -54,19 +55,8 @@ var LegendModel = echarts.extendComponentModel({ ...@@ -54,19 +55,8 @@ var LegendModel = echarts.extendComponentModel({
}, },
_updateData: function (ecModel) { _updateData: function (ecModel) {
var legendData = zrUtil.map(this.get('data') || [], function (dataItem) {
// Can be string or number
if (typeof dataItem === 'string' || typeof dataItem === 'number') {
dataItem = {
name: dataItem
};
}
return new Model(dataItem, this, this.ecModel);
}, this);
this._data = legendData;
var availableNames = zrUtil.map(ecModel.getSeries(), function (series) { var availableNames = zrUtil.map(ecModel.getSeries(), function (series) {
return series.getDisplayName(); return series.name;
}); });
ecModel.eachSeries(function (seriesModel) { ecModel.eachSeries(function (seriesModel) {
if (seriesModel.legendDataProvider) { if (seriesModel.legendDataProvider) {
...@@ -74,11 +64,34 @@ var LegendModel = echarts.extendComponentModel({ ...@@ -74,11 +64,34 @@ var LegendModel = echarts.extendComponentModel({
availableNames = availableNames.concat(data.mapArray(data.getName)); availableNames = availableNames.concat(data.mapArray(data.getName));
} }
}); });
/** /**
* @type {Array.<string>} * @type {Array.<string>}
* @private * @private
*/ */
this._availableNames = availableNames; this._availableNames = zrUtil.filter(availableNames, function (name) {
return name !== DEFAULT_COMPONENT_NAME;
});
// If legend.data not specified in option, use availableNames as data,
// which is convinient for user preparing option.
var rawData = this.get('data') || availableNames;
var legendData = zrUtil.map(rawData, function (dataItem) {
// Can be string or number
if (typeof dataItem === 'string' || typeof dataItem === 'number') {
dataItem = {
name: dataItem
};
}
return new Model(dataItem, this, this.ecModel);
}, this);
/**
* @type {Array.<module:echarts/model/Model>}
* @private
*/
this._data = legendData;
}, },
/** /**
......
...@@ -8,7 +8,7 @@ export default function (ecModel) { ...@@ -8,7 +8,7 @@ export default function (ecModel) {
// If in any legend component the status is not selected. // If in any legend component the status is not selected.
// Because in legend series is assumed selected when it is not in the legend data. // Because in legend series is assumed selected when it is not in the legend data.
for (var i = 0; i < legendModels.length; i++) { for (var i = 0; i < legendModels.length; i++) {
if (!legendModels[i].isSelected(series.getDisplayName())) { if (!legendModels[i].isSelected(series.name)) {
return false; return false;
} }
} }
......
...@@ -32,6 +32,12 @@ var ComponentModel = Model.extend({ ...@@ -32,6 +32,12 @@ var ComponentModel = Model.extend({
id: '', id: '',
/** /**
* Because simplified concept is probably better, series.name (or component.name)
* has been having too many resposibilities:
* (1) Generating id (which requires name in option should not be modified).
* (2) As an index to mapping series when merging option or calling API (a name
* can refer to more then one components, which is convinient is some case).
* (3) Display.
* @readOnly * @readOnly
*/ */
name: '', name: '',
......
...@@ -80,6 +80,7 @@ var SeriesModel = ComponentModel.extend({ ...@@ -80,6 +80,7 @@ var SeriesModel = ComponentModel.extend({
prepareSource(this); prepareSource(this);
var data = this.getInitialData(option, ecModel); var data = this.getInitialData(option, ecModel);
if (__DEV__) { if (__DEV__) {
...@@ -100,6 +101,8 @@ var SeriesModel = ComponentModel.extend({ ...@@ -100,6 +101,8 @@ var SeriesModel = ComponentModel.extend({
// ??? should not restoreData here? but called by echart? // ??? should not restoreData here? but called by echart?
// this.restoreData(); // this.restoreData();
autoSeriesName(this);
}, },
/** /**
...@@ -154,6 +157,8 @@ var SeriesModel = ComponentModel.extend({ ...@@ -154,6 +157,8 @@ var SeriesModel = ComponentModel.extend({
this.dataTask.dirty(); this.dataTask.dirty();
inner(this).dataBeforeProcessed = data; inner(this).dataBeforeProcessed = data;
autoSeriesName(this);
}, },
fillDataTextStyle: function (data) { fillDataTextStyle: function (data) {
...@@ -221,28 +226,6 @@ var SeriesModel = ComponentModel.extend({ ...@@ -221,28 +226,6 @@ var SeriesModel = ComponentModel.extend({
return inner(this).dataBeforeProcessed; return inner(this).dataBeforeProcessed;
}, },
/**
* Because of some complicated requirements or some historical reasons,
* series.name (or component.name) has too many resposibility:
* (1) Generating id (which requires name in option should not be modified).
* (2) As an index to mapping series when merging option or calling API.
* (3) Display.
* Here Sereis provides method `getDisplayName` to be reponsible for display,
* where the display name can be auto generated by some default rule and
* without modifying series.name in option or effect the other responsibilities
* of series.name.
* @return {string}
*/
getDisplayName: function () {
// User specified name has higher priority, otherwise it may cause
// series can not be queried unexpectedly.
var displayName = this.name;
if (modelUtil.DEFAULT_COMPONENT_NAME === displayName) {
displayName = getSeriesAutoName(this) || displayName;
}
return displayName;
},
/** /**
* Coord dimension to data dimension. * Coord dimension to data dimension.
* *
...@@ -342,7 +325,7 @@ var SeriesModel = ComponentModel.extend({ ...@@ -342,7 +325,7 @@ var SeriesModel = ComponentModel.extend({
var colorEl = getTooltipMarker(color); var colorEl = getTooltipMarker(color);
var seriesName = this.getDisplayName(); var seriesName = this.name;
// FIXME // FIXME
if (seriesName === '\0-') { if (seriesName === '\0-') {
// Not show '-' // Not show '-'
...@@ -433,6 +416,20 @@ var SeriesModel = ComponentModel.extend({ ...@@ -433,6 +416,20 @@ var SeriesModel = ComponentModel.extend({
zrUtil.mixin(SeriesModel, modelUtil.dataFormatMixin); zrUtil.mixin(SeriesModel, modelUtil.dataFormatMixin);
zrUtil.mixin(SeriesModel, colorPaletteMixin); zrUtil.mixin(SeriesModel, colorPaletteMixin);
/**
* MUST be called after `prepareSource` called
* Here we need to make auto series, especially for auto legend. But we
* do not modify series.name in option to avoid side effects.
*/
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) {
seriesModel.name = getSeriesAutoName(seriesModel) || name;
}
}
function dataTaskCount(context) { function dataTaskCount(context) {
return context.model.getRawData().count(); return context.model.getRawData().count();
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册