提交 991112ae 编写于 作者: P pah100

更新 datazoom category 的处理。

上级 c111e8b7
......@@ -29,12 +29,12 @@ define(function (require) {
// Process axis data
var axisModel = ecModel.getComponent(dimNames.axis, axisIndex);
var isCategoryFilter = axisModel.get('type') === 'category';
var seriesModels = dataZoomModel.getTargetSeriesModels(dimNames.dim, axisIndex);
var dataExtent = calculateDataExtent(dimNames, axisModel, seriesModels);
var dataWindow = calculateDataWindow(axisModel, dataExtent);
var axisType = axisModel.get('type');
var dataWindow = calculateDataWindow(axisModel, dataExtent, isCategoryFilter);
if (axisType === 'category') {
if (isCategoryFilter) {
var axisData = axisModel.getData();
// FIXME
// setter?
......@@ -50,10 +50,23 @@ define(function (require) {
return;
}
seriesData.filterSelf(function (entry) {
var value = entry[dimNames.getter]();
return value >= dataWindow[0] && value <= dataWindow[1];
});
if (isCategoryFilter) {
seriesData.filterSelf(function (entry) {
var dataIndex = entry[dimNames.getter]();
var reserve = dataIndex >= dataWindow[0] && dataIndex <= dataWindow[1];
if (reserve) {
entry.setDataIndex(dataIndex - dataWindow[0]);
}
return reserve;
});
}
else {
seriesData.filterSelf(function (entry) {
var value = entry[dimNames.getter]();
return value >= dataWindow[0] && value <= dataWindow[1];
});
}
// FIXME
// 对于value轴的过滤(另一个轴是category),效果有问题,现在简单去除节点不行。
// FIXME
......@@ -85,15 +98,20 @@ define(function (require) {
return dataExtent;
}
function calculateDataWindow(axisModel, dataExtent) {
function calculateDataWindow(axisModel, dataExtent, isCategoryFilter) {
var dataZoomStart = axisModel.get('dataZoomStart');
var dataZoomEnd = axisModel.get('dataZoomEnd');
var percentExtent = [0, 100];
return [
Math.floor(linearMap(dataZoomStart, percentExtent, dataExtent, true)),
Math.ceil(linearMap(dataZoomEnd, percentExtent, dataExtent, true))
var result = [
linearMap(dataZoomStart, percentExtent, dataExtent, true),
linearMap(dataZoomEnd, percentExtent, dataExtent, true)
];
if (isCategoryFilter) {
result = [Math.floor(result[0]), Math.ceil(result[1])];
}
return result;
}
});
......@@ -286,11 +286,6 @@ define(function(require) {
*/
filterSelf: function (cb, context) {
this.elements = zrUtil.filter(this.elements, cb, context || this);
this.each(this._setEntryDataIndex);
},
_setEntryDataIndex: function (entry, dataIndex) {
entry.setDataIndex(dataIndex);
},
/**
......@@ -396,7 +391,7 @@ define(function(require) {
independentVar = ['y'];
dependentVar = 'x';
categoryAxisModel = xAxisModel;
categoryAxisModel = yAxisModel;
}
else {
// PENDING
......
......@@ -112,7 +112,7 @@ define(function(require) {
return SubComponentModel;
}
ComponentModel.getComponentModelClass = function (componentType, option) {
ComponentModel.getComponentModelClass = function (componentType, option, throwWhenNotFound) {
var fullComponentType = componentType;
if (option && option.type) {
fullComponentType = componentType + TYPE_DELIMITER + option.type;
......@@ -121,6 +121,11 @@ define(function(require) {
if (ComponentClass[IS_CONTAINER]) {
ComponentClass = ComponentClass[option.type];
}
if (throwWhenNotFound && !ComponentClass) {
throw new Error('Component ' + fullComponentType + ' not exists');
}
return ComponentClass;
};
......
......@@ -132,13 +132,9 @@ define(function (require) {
for (var i = 0; i < componentOption.length; i++) {
var componentModel = componentsMap[componentType][i];
var ComponentModelClass = ComponentModel.getComponentModelClass(
componentType, componentOption[i]
componentType, componentOption[i], true
);
if (! ComponentModelClass) {
throw new Error('Component ' + componentType + ' not exists');
}
if (componentModel && componentModel instanceof ComponentModelClass) {
componentModel.mergeOption(componentOption[i], this);
}
......
......@@ -16,7 +16,7 @@
require([
'echarts',
'echarts/chart/line',
'echarts/chart/bar',
'echarts/component/legend',
'echarts/component/grid',
'echarts/component/axis',
......@@ -34,9 +34,9 @@
for (var i = 0; i < 20; i++) {
xAxisData.push('类目' + i);
data1.push(Math.random() * 5);
data2.push(Math.random());
data3.push(Math.random());
data1.push(Math.random() * 2);
data2.push(Math.random() * 2);
data3.push(Math.random() * 2);
}
chart.setOption({
......@@ -55,17 +55,17 @@
series: [
{
name: 'line',
type: 'line',
type: 'bar',
data: data1
},
{
name: 'line2',
type: 'line',
type: 'bar',
data: data2
},
{
name: 'line3',
type: 'line',
type: 'bar',
data: data3
}
],
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册