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

Fix auto legend.

上级 3aacd5fb
......@@ -104,7 +104,7 @@ var MapSeries = SeriesModel.extend({
var otherIndex = seriesGroup[i].originalData.indexOfName(name);
if (!isNaN(seriesGroup[i].originalData.get('value', otherIndex))) {
seriesNames.push(
encodeHTML(seriesGroup[i].getDisplayName())
encodeHTML(seriesGroup[i].name)
);
}
}
......
......@@ -33,7 +33,7 @@ var RadarSeries = SeriesModel.extend({
var coordSys = this.coordinateSystem;
var indicatorAxes = coordSys.getIndicatorAxes();
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) {
return encodeHTML(axis.name + ' : ' + value[idx]);
}).join('<br />');
......
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';
var LegendModel = echarts.extendComponentModel({
......@@ -54,19 +55,8 @@ var LegendModel = echarts.extendComponentModel({
},
_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) {
return series.getDisplayName();
return series.name;
});
ecModel.eachSeries(function (seriesModel) {
if (seriesModel.legendDataProvider) {
......@@ -74,11 +64,34 @@ var LegendModel = echarts.extendComponentModel({
availableNames = availableNames.concat(data.mapArray(data.getName));
}
});
/**
* @type {Array.<string>}
* @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) {
// 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.
for (var i = 0; i < legendModels.length; i++) {
if (!legendModels[i].isSelected(series.getDisplayName())) {
if (!legendModels[i].isSelected(series.name)) {
return false;
}
}
......
......@@ -32,6 +32,12 @@ var ComponentModel = Model.extend({
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
*/
name: '',
......
......@@ -80,6 +80,7 @@ var SeriesModel = ComponentModel.extend({
prepareSource(this);
var data = this.getInitialData(option, ecModel);
if (__DEV__) {
......@@ -100,6 +101,8 @@ var SeriesModel = ComponentModel.extend({
// ??? should not restoreData here? but called by echart?
// this.restoreData();
autoSeriesName(this);
},
/**
......@@ -154,6 +157,8 @@ var SeriesModel = ComponentModel.extend({
this.dataTask.dirty();
inner(this).dataBeforeProcessed = data;
autoSeriesName(this);
},
fillDataTextStyle: function (data) {
......@@ -221,28 +226,6 @@ var SeriesModel = ComponentModel.extend({
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.
*
......@@ -342,7 +325,7 @@ var SeriesModel = ComponentModel.extend({
var colorEl = getTooltipMarker(color);
var seriesName = this.getDisplayName();
var seriesName = this.name;
// FIXME
if (seriesName === '\0-') {
// Not show '-'
......@@ -433,6 +416,20 @@ var SeriesModel = ComponentModel.extend({
zrUtil.mixin(SeriesModel, modelUtil.dataFormatMixin);
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) {
return context.model.getRawData().count();
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册