82 lines
2.4 KiB
JavaScript
82 lines
2.4 KiB
JavaScript
/**
|
||
* 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
|
||
};
|
||
});
|