提交 c4c7278e 编写于 作者: L lang

Optimize case with two category axes

上级 839409c1
...@@ -39,24 +39,21 @@ define(function(require) { ...@@ -39,24 +39,21 @@ define(function(require) {
var creator = creators[coordSysName]; var creator = creators[coordSysName];
var registeredCoordSys = CoordinateSystem.get(coordSysName); var registeredCoordSys = CoordinateSystem.get(coordSysName);
// FIXME // FIXME
var result = creator && creator(data, seriesModel, ecModel); var axesInfo = creator && creator(data, seriesModel, ecModel);
var dimensions = result && result.dimensions; var dimensions = axesInfo && axesInfo.dimensions;
if (!dimensions) { if (!dimensions) {
// Get dimensions from registered coordinate system // Get dimensions from registered coordinate system
dimensions = (registeredCoordSys && registeredCoordSys.dimensions) || ['x', 'y']; dimensions = (registeredCoordSys && registeredCoordSys.dimensions) || ['x', 'y'];
dimensions = completeDimensions(dimensions, data, dimensions.concat(['value'])); dimensions = completeDimensions(dimensions, data, dimensions.concat(['value']));
} }
var categoryAxisModel = result && result.categoryAxisModel; var categoryIndex = axesInfo ? axesInfo.categoryIndex : -1;
var categories;
var categoryDimIndex = dimensions[0].type === 'ordinal'
? 0 : (dimensions[1].type === 'ordinal' ? 1 : -1);
var list = new List(dimensions, seriesModel); var list = new List(dimensions, seriesModel);
var nameList = createNameList(result, data); var nameList = createNameList(axesInfo, data);
var dimValueGetter = (categoryAxisModel && ifNeedCompleteOrdinalData(data)) var categories = {};
var dimValueGetter = (categoryIndex >= 0 && ifNeedCompleteOrdinalData(data))
? function (itemOpt, dimName, dataIndex, dimIndex) { ? function (itemOpt, dimName, dataIndex, dimIndex) {
// If any dataItem is like { value: 10 } // If any dataItem is like { value: 10 }
if (modelUtil.isDataItemOption(itemOpt)) { if (modelUtil.isDataItemOption(itemOpt)) {
...@@ -64,7 +61,7 @@ define(function(require) { ...@@ -64,7 +61,7 @@ define(function(require) {
} }
// Use dataIndex as ordinal value in categoryAxis // Use dataIndex as ordinal value in categoryAxis
return dimIndex === categoryDimIndex return dimIndex === categoryIndex
? dataIndex ? dataIndex
: converDataValue(getDataItemValue(itemOpt), dimensions[dimIndex]); : converDataValue(getDataItemValue(itemOpt), dimensions[dimIndex]);
} }
...@@ -76,15 +73,14 @@ define(function(require) { ...@@ -76,15 +73,14 @@ define(function(require) {
list.hasItemOption = true; list.hasItemOption = true;
} }
// Consider case: var categoryAxesModels = axesInfo && axesInfo.categoryAxesModels;
// (1) [["a", "b"], ...] if (categoryAxesModels && categoryAxesModels[dimName]) {
// (2) [[2, 4, "a"], ...]
if (dimensions[dimIndex].type === 'ordinal' && dimIndex < 2) {
// If given value is a category string // If given value is a category string
if (typeof val === 'string') { if (typeof val === 'string') {
// Lazy get categories // Lazy get categories
categories = categories || categoryAxisModel.getCategories(); categories[dimName] = categories[dimName]
val = zrUtil.indexOf(categories, val); || categoryAxesModels[dimName].getCategories();
val = zrUtil.indexOf(categories[dimName], val);
if (val < 0 && !isNaN(val)) { if (val < 0 && !isNaN(val)) {
// In case some one write '1', '2' istead of 1, 2 // In case some one write '1', '2' istead of 1, 2
val = +val; val = +val;
...@@ -149,15 +145,21 @@ define(function(require) { ...@@ -149,15 +145,21 @@ define(function(require) {
]; ];
var isXAxisCateogry = xAxisType === 'category'; var isXAxisCateogry = xAxisType === 'category';
var isYAxisCategory = yAxisType === 'category';
completeDimensions(dimensions, data, ['x', 'y', 'z']); completeDimensions(dimensions, data, ['x', 'y', 'z']);
var categoryAxesModels = {};
if (isXAxisCateogry) {
categoryAxesModels.x = xAxisModel;
}
if (isYAxisCategory) {
categoryAxesModels.y = yAxisModel;
}
return { return {
dimensions: dimensions, dimensions: dimensions,
categoryIndex: isXAxisCateogry ? 0 : 1, categoryIndex: isXAxisCateogry ? 0 : (isYAxisCategory ? 1 : -1),
categoryAxisModel: isXAxisCateogry categoryAxesModels: categoryAxesModels
? xAxisModel
: (yAxisType === 'category' ? yAxisModel : null)
}; };
}, },
...@@ -200,15 +202,21 @@ define(function(require) { ...@@ -200,15 +202,21 @@ define(function(require) {
} }
]; ];
var isAngleAxisCateogry = angleAxisType === 'category'; var isAngleAxisCateogry = angleAxisType === 'category';
var isRadiusAxisCateogry = radiusAxisType === 'category';
completeDimensions(dimensions, data, ['radius', 'angle', 'value']); completeDimensions(dimensions, data, ['radius', 'angle', 'value']);
var categoryAxesModels = {};
if (isRadiusAxisCateogry) {
categoryAxesModels.radius = radiusAxisModel;
}
if (isAngleAxisCateogry) {
categoryAxesModels.angle = angleAxisModel;
}
return { return {
dimensions: dimensions, dimensions: dimensions,
categoryIndex: isAngleAxisCateogry ? 1 : 0, categoryIndex: isAngleAxisCateogry ? 1 : (isRadiusAxisCateogry ? 0 : -1),
categoryAxisModel: isAngleAxisCateogry categoryAxesModels: categoryAxesModels
? angleAxisModel
: (radiusAxisType === 'category' ? radiusAxisModel : null)
}; };
}, },
......
...@@ -137,7 +137,7 @@ define(function (require) { ...@@ -137,7 +137,7 @@ define(function (require) {
} }
]; ];
var data = this.fixData(option.data); var data = this.fixData(option.data || []);
var nameList = []; var nameList = [];
var nameMap = this.nameMap = {}; var nameMap = this.nameMap = {};
var count = 0; var count = 0;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册