157 lines
4.1 KiB
Plaintext
157 lines
4.1 KiB
Plaintext
/**
|
|
* @module echarts/model/Model
|
|
*/
|
|
define(function (require) {
|
|
|
|
var zrUtil = require('zrender/core/util');
|
|
var clazzUtil = require('../util/clazz');
|
|
|
|
/**
|
|
* @alias module:echarts/model/Model
|
|
* @constructor
|
|
* @param {Object} option
|
|
* @param {module:echarts/model/Model} [parentModel]
|
|
* @param {module:echarts/model/Global} [ecModel]
|
|
* @param {Object} extraOpt
|
|
*/
|
|
function Model(option, parentModel, ecModel, extraOpt) {
|
|
/**
|
|
* @type {module:echarts/model/Model}
|
|
* @readOnly
|
|
*/
|
|
this.parentModel = parentModel;
|
|
|
|
/**
|
|
* @type {module:echarts/model/Global}
|
|
* @readOnly
|
|
*/
|
|
this.ecModel = ecModel;
|
|
|
|
/**
|
|
* @type {Object}
|
|
* @protected
|
|
*/
|
|
this.option = option;
|
|
|
|
// Simple optimization
|
|
if (this.init) {
|
|
if (arguments.length <= 4) {
|
|
this.init(option, parentModel, ecModel, extraOpt);
|
|
}
|
|
else {
|
|
this.init.apply(this, arguments);
|
|
}
|
|
}
|
|
}
|
|
|
|
Model.prototype = {
|
|
|
|
constructor: Model,
|
|
|
|
/**
|
|
* Model 的初始化函数
|
|
* @param {Object} option
|
|
*/
|
|
init: null,
|
|
|
|
/**
|
|
* 从新的 Option merge
|
|
*/
|
|
mergeOption: function (option) {
|
|
zrUtil.merge(this.option, option, true);
|
|
},
|
|
|
|
/**
|
|
* @param {string} path
|
|
* @param {boolean} [ignoreParent=false]
|
|
* @return {*}
|
|
*/
|
|
get: function (path, ignoreParent) {
|
|
if (!path) {
|
|
return this.option;
|
|
}
|
|
|
|
if (typeof path === 'string') {
|
|
path = path.split('.');
|
|
}
|
|
|
|
var obj = this.option;
|
|
var parentModel = this.parentModel;
|
|
for (var i = 0; i < path.length; i++) {
|
|
// Ignore empty
|
|
if (!path[i]) {
|
|
continue;
|
|
}
|
|
// obj could be number/string/... (like 0)
|
|
obj = (obj && typeof obj === 'object') ? obj[path[i]] : null;
|
|
if (obj == null) {
|
|
break;
|
|
}
|
|
}
|
|
if (obj == null && parentModel && !ignoreParent) {
|
|
obj = parentModel.get(path);
|
|
}
|
|
return obj;
|
|
},
|
|
|
|
/**
|
|
* @param {string} key
|
|
* @param {boolean} [ignoreParent=false]
|
|
* @return {*}
|
|
*/
|
|
getShallow: function (key, ignoreParent) {
|
|
var option = this.option;
|
|
var val = option && option[key];
|
|
var parentModel = this.parentModel;
|
|
if (val == null && parentModel && !ignoreParent) {
|
|
val = parentModel.getShallow(key);
|
|
}
|
|
return val;
|
|
},
|
|
|
|
/**
|
|
* @param {string} path
|
|
* @param {module:echarts/model/Model} [parentModel]
|
|
* @return {module:echarts/model/Model}
|
|
*/
|
|
getModel: function (path, parentModel) {
|
|
var obj = this.get(path, true);
|
|
var thisParentModel = this.parentModel;
|
|
var model = new Model(
|
|
obj, parentModel || (thisParentModel && thisParentModel.getModel(path)),
|
|
this.ecModel
|
|
);
|
|
return model;
|
|
},
|
|
|
|
/**
|
|
* If model has option
|
|
*/
|
|
isEmpty: function () {
|
|
return this.option == null;
|
|
},
|
|
|
|
restoreData: function () {},
|
|
|
|
// Pending
|
|
clone: function () {
|
|
var Ctor = this.constructor;
|
|
return new Ctor(zrUtil.clone(this.option));
|
|
},
|
|
|
|
setReadOnly: function (properties) {
|
|
clazzUtil.setReadOnly(this, properties);
|
|
}
|
|
};
|
|
|
|
// Enable Model.extend.
|
|
clazzUtil.enableClassExtend(Model);
|
|
|
|
var mixin = zrUtil.mixin;
|
|
mixin(Model, require('./mixin/lineStyle'));
|
|
mixin(Model, require('./mixin/areaStyle'));
|
|
mixin(Model, require('./mixin/textStyle'));
|
|
mixin(Model, require('./mixin/itemStyle'));
|
|
|
|
return Model;
|
|
}); |