提交 d0519cc2 编写于 作者: L lang

List#getName optimization, LegendView tweak

上级 0fa4308d
......@@ -23,7 +23,7 @@ define(function (require) {
type: 'legend',
init: function () {
this._symbolElMap = {};
this._itemElMap = {};
},
render: function (legendModel, ecModel, api) {
......@@ -56,32 +56,35 @@ define(function (require) {
var seriesModel = ecModel.getSeriesByName(seriesName, true);
var data = seriesModel.getData();
var legendSymbol;
var symbolElMap = this._symbolElMap;
var itemElMap = this._itemElMap;
var itemGroup = itemElMap[seriesName];
if (legendModel.isSelected(seriesName)) {
legendSymbol = this._createSymbol(
data, x, y, width, height, data.getVisual('color'), api
itemGroup = new api.Group();
this._createSymbol(
data, x, y, width, height, data.getVisual('color'), itemGroup
);
itemElMap[seriesName] = itemGroup;
}
else {
legendSymbol = symbolElMap[seriesName];
legendSymbol.eachChild(function (child) {
child.style.set(LEGEND_DISABLE_STYLE);
itemGroup.eachChild(function (child) {
if (child.type !== 'text') {
child.style.set(LEGEND_DISABLE_STYLE);
}
});
legendSymbol.off('click');
itemGroup.off('click');
}
symbolElMap[seriesName] = legendSymbol;
var text = new api.Text({
style: {
text: seriesName,
x: x + width + 5,
y: y,
y: y + height / 2,
fill: '#000',
textAlign: 'left',
textBaseline: 'top'
textBaseline: 'middle'
}
});
itemGroup.add(text);
var textRect = text.getBoundingRect();
if (orient === 'horizontal') {
......@@ -91,21 +94,16 @@ define(function (require) {
y += Math.max(height, textRect.height) + itemGap;
}
group.add(legendSymbol);
group.add(text);
group.add(itemGroup);
var onClick = zrUtil.curry(createSelectActionDispatcher, this.uid, seriesName, api);
legendSymbol.on('click', onClick, this);
text.on('click', onClick, this);
itemGroup.on('click', zrUtil.curry(createSelectActionDispatcher, this.uid, seriesName, api), this);
}, this);
var groupRect = group.getBoundingRect();
group.position[0] -= groupRect.width / 2;
},
_createSymbol: function (data, x, y, width, height, color, api) {
var group = new api.Group();
_createSymbol: function (data, x, y, width, height, color, group) {
// Using rect symbol defaultly
var legendSymbolType = data && data.getVisual('legendSymbol')
|| 'roundRect';
......
/**
* Grid is a region which contains at most 4 cartesian systems
*
* TODO Axis Scale
* TODO Default cartesian
*/
define(function(require, factory) {
......
......@@ -214,6 +214,17 @@ define(function (require) {
this._rawValueDims = rawValue1D ? dimensions.slice(1, 2) : dimensions.slice();
// Use the name in option as data id in two value axis case
for (var i = 0; i < optionModelIndices.length; i++) {
if (! nameList[i]) {
var modelIdx = optionModelIndices[i];
var model = optionModels[modelIdx];
if (model && model.option) {
nameList[i] = model.option.name || '';
}
}
}
this._nameList = nameList;
};
......@@ -335,15 +346,13 @@ define(function (require) {
return this.indices[idx];
};
var nameQueryPath = ['name'];
/**
* @param {number} idx
* @return {string}
*/
listProto.getName = function (idx) {
var nameList = this._nameList;
return (nameList && nameList[this.indices[idx]])
|| this.getItemModel(idx).get(nameQueryPath, true) || '';
return (nameList && nameList[this.indices[idx]]) || '';
};
......@@ -522,7 +531,12 @@ define(function (require) {
* @return {module:echarts/data/DataDiffer}
*/
listProto.diff = function (oldList) {
return new DataDiffer(oldList ? oldList.indices : [], this.indices);
var nameList = this._nameList;
return new DataDiffer(
oldList ? oldList.indices : [], this.indices, function (idx) {
return nameList && nameList[idx] || idx;
}
);
};
/**
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册