You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
81 lines
2.4 KiB
81 lines
2.4 KiB
/**
|
|
* echarts层级查找方法
|
|
*
|
|
* @desc echarts基于Canvas,纯Javascript图表库,提供直观,生动,可交互,可个性化定制的数据统计图表。
|
|
* @author Kener (@Kener-林峰, kener.linfeng@gmail.com)
|
|
*
|
|
*/
|
|
define(function(require) {
|
|
var zrUtil = require('zrender/tool/util');
|
|
|
|
/**
|
|
* 获取嵌套选项的基础方法
|
|
* 返回optionTarget中位于optionLocation上的值,如果没有定义,则返回undefined
|
|
*/
|
|
function query(optionTarget, optionLocation) {
|
|
if (typeof optionTarget == 'undefined') {
|
|
return;
|
|
}
|
|
|
|
if (!optionLocation) {
|
|
return optionTarget;
|
|
}
|
|
|
|
optionLocation = optionLocation.split('.');
|
|
var length = optionLocation.length;
|
|
var curIdx = 0;
|
|
while (curIdx < length) {
|
|
optionTarget = optionTarget[optionLocation[curIdx]];
|
|
if (typeof optionTarget == 'undefined') {
|
|
return;
|
|
}
|
|
curIdx++;
|
|
}
|
|
|
|
return optionTarget;
|
|
}
|
|
|
|
/**
|
|
* 获取多级控制嵌套属性的基础方法
|
|
* 返回ctrList中优先级最高(最靠前)的非undefined属性,ctrList中均无定义则返回undefined
|
|
*/
|
|
function deepQuery(ctrList, optionLocation) {
|
|
var finalOption;
|
|
for (var i = 0, l = ctrList.length; i < l; i++) {
|
|
finalOption = query(ctrList[i], optionLocation);
|
|
if (typeof finalOption != 'undefined') {
|
|
return finalOption;
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 获取多级控制嵌套属性的基础方法
|
|
* 根据ctrList中优先级合并产出目标属性
|
|
*/
|
|
function deepMerge(ctrList, optionLocation) {
|
|
var finalOption;
|
|
var len = ctrList.length;
|
|
while (len--) {
|
|
var tempOption = query(ctrList[len], optionLocation);
|
|
if (typeof tempOption != 'undefined') {
|
|
if (typeof finalOption == 'undefined') {
|
|
finalOption = zrUtil.clone(tempOption);
|
|
}
|
|
else {
|
|
zrUtil.merge(
|
|
finalOption, tempOption, true
|
|
);
|
|
}
|
|
}
|
|
}
|
|
|
|
return finalOption;
|
|
}
|
|
|
|
return {
|
|
query : query,
|
|
deepQuery : deepQuery,
|
|
deepMerge : deepMerge
|
|
};
|
|
});
|
|
|