图表JS对象新增internal()函数,替换已弃用的echartsInstance()函数

This commit is contained in:
datagear 2021-08-04 22:08:05 +08:00
parent ef2911ccbb
commit d4d0cc2cda
2 changed files with 94 additions and 71 deletions

View File

@ -28,7 +28,7 @@
*
* 此图表工厂支持为图表元素添加elementAttrConst.MAP属性来设置地图图表的地图名
*
* 此图表工厂支持为<body>元素图表元素添加elementAttrConst.ECHARTS_THEME属性来设置图表Echarts主题名
* 此图表工厂支持为<body>元素图表元素添加elementAttrConst.ECHARTS_THEME属性来设置图表ECharts主题名
*
* 此图表工厂支持为<body>元素图表元素添加elementAttrConst.DISABLE_SETTING属性用于禁用图表交互设置功能
* 值为"true"表示禁用其他表示启用
@ -616,8 +616,8 @@
};
/**
* 初始化图表的echarts主题名
* 此方法依次从图表元素<body>元素的elementAttrConst.ECHARTS_THEME属性获取echarts主题名
* 初始化图表的ECharts主题名
* 此方法依次从图表元素<body>元素的elementAttrConst.ECHARTS_THEME属性获取ECharts主题名
*/
chartBase._initEchartsThemeName = function()
{
@ -809,15 +809,15 @@
};
/**
* Echarts图表支持函数获取/设置图表的echarts主题名
* 此方法用于为echarts图表提供支持如果不是echarts图表则不必设置此项
* ECharts图表支持函数获取/设置图表的ECharts主题名
* 此方法用于为ECharts图表提供支持如果不是ECharts图表则不必设置此项
*
* 图表初始化时会使用图表元素的"dg-echarts-theme"属性值执行设置操作
*
* 图表渲染器实现相关
* 图表渲染器应使用此函数获取并应用echarts主题
* 图表渲染器应使用此函数获取并应用ECharts主题
*
* @param themeName 可选要设置的且已注册的echarts主题名没有则执行获取操作
* @param themeName 可选要设置的且已注册的ECharts主题名没有则执行获取操作
*/
chartBase.echartsThemeName = function(themeName)
{
@ -1034,6 +1034,7 @@
/**
* 获取/设置图表此次更新的结果数据
* 图表更新前会自动执行设置操作通过chartBase.doUpdate()函数
*
* @param results 可选要设置的更新结果数据
* @returns 要获取的更新结果数据没有则返回null
@ -1065,9 +1066,10 @@
}
else
{
var echartsInstance = this.echartsInstance();
if(echartsInstance)
echartsInstance.resize();
//为ECharts图表提供默认resize支持
var internal = this.internal();
if(this._isEchartsInstance(internal))
internal.resize();
}
};
@ -1098,17 +1100,18 @@
}
else
{
var echartsInstance = this.echartsInstance();
if(echartsInstance && !echartsInstance.isDisposed())
//为ECharts图表提供默认destroy支持
var internal = this.internal();
if(this._isEchartsInstance(internal) && !internal.isDisposed())
{
echartsInstance.dispose();
this.echartsInstance(null);
internal.dispose();
}
this.elementJquery().empty();
}
this._destroySetting();
this.internal(null);
//最后清空扩展属性值,因为上面逻辑可能会使用到
this._clearExtValue();
@ -1716,6 +1719,21 @@
return (this.widgetId() == chartWidgetId);
};
/**
* 获取/设置图表底层组件
* 图表底层组件是用于为渲染图表提供底层支持的组件比如ECharts实例表格组件DOM元素等
*
* 图表渲染器实现相关
* 图表渲染器应在其render()函数内部使用此函数设置底层组件
*
* @param internal 可选要设置的底层组件不设置则执行获取操作
* @returns 要获取的底层组件没有则返回null
*/
chartBase.internal = function(internal)
{
return chartFactory.extValueBuiltin(this, "internal", internal);
};
/**
* 获取/设置图表渲染上下文的属性值
*
@ -2279,55 +2297,54 @@
};
/**
* Echarts图表支持函数初始化图表的Echarts对象
* 此方法会自动应用dg-chart-themedg-echarts-theme
* ECharts图表支持函数将图表初始化为ECharts图表设置其选项
* 此方法会自动应用chartBase.theme()chartBase.echartsThemeName()至初始化的ECharts图表
* 此方法会自动调用chartBase.internal()将初始化的ECharts实例对象设置为图表底层组件
*
* @param options echarts设置
* @return echarts实例对象
* @param options 要设置的ECharts选
* @returns ECharts实例对象
*/
chartBase.echartsInit = function(options)
{
var instance = echarts.init(this.element(), this._echartsGetRegisteredThemeName());
instance.setOption(options);
this.echartsInstance(instance);
this.internal(instance);
return instance;
};
/**
* Echarts图表支持函数获取/设置图表的Echarts实例对象
*
* @param instance 可选要设置的echarts实例不设置则执行获取操作
*/
chartBase.echartsInstance = function(instance)
{
return chartFactory.extValueBuiltin(this, "echartsInstance", instance);
};
/**
* Echarts图表支持函数设置图表的Echarts实例的选项
* ECharts图表支持函数设置图表的ECharts实例的选项
*
* @param options
*/
chartBase.echartsOptions = function(options)
{
var instance = this.echartsInstance();
var internal = this.internal();
if(instance == null)
throw new Error("Chart is not initialized as ECharts");
if(!this._isEchartsInstance(internal))
throw new Error("Not ECharts chart");
instance.setOption(options);
internal.setOption(options);
};
/**
* Echarts图表支持函数获取用于此图表的且已注册的Echarts主题名
* 给定对象是否是ECharts实例
*/
chartBase._isEchartsInstance = function(obj)
{
return (obj && obj.constructor && obj.constructor.name && /ECharts/i.test(obj.constructor.name));
};
/**
* ECharts图表支持函数获取用于此图表的且已注册的ECharts主题名
*/
chartBase._echartsGetRegisteredThemeName = function()
{
var themeName = this.echartsThemeName();
//从ChartTheme构建echarts主题
//从ChartTheme构建ECharts主题
if(!themeName)
{
var chartTheme = this.theme();
@ -2351,9 +2368,9 @@
};
/**
* Echarts图表支持函数判断指定名称的echarts地图是否已经注册过而无需再加载
* ECharts图表支持函数判断指定名称的ECharts地图是否已经注册过而无需再加载
*
* @param name echarts地图名称
* @param name ECharts地图名称
*/
chartBase.echartsMapRegistered = function(name)
{
@ -2361,11 +2378,11 @@
};
/**
* Echarts图表支持函数加载并注册指定名称的echarts地图GeoJSONSVG并在完成后执行回调函数
* ECharts图表支持函数加载并注册指定名称的ECharts地图GeoJSONSVG并在完成后执行回调函数
* 注意如果地图图表插件的render/update函数中调用此函数应该首先设置插件的asyncRender/asyncUpdate
* 并在callback中调用chart.statusRendered(true)/chart.statusUpdated(true)具体参考此文件顶部的注释
*
* @param name echarts地图名称
* @param name ECharts地图名称
* @param callback 完成回调函数function(name, map){ ... }
*/
chartBase.echartsLoadMap = function(name, callback)
@ -2400,10 +2417,10 @@
};
/**
* 图表事件支持函数创建Echarts图表的事件对象
* 图表事件支持函数创建ECharts图表的事件对象
*
* @param eventType 事件类型
* @param echartsEventParams echarts事件处理函数的参数对象
* @param echartsEventParams ECharts事件处理函数的参数对象
*/
chartBase.eventNewEcharts = function(eventType, echartsEventParams)
{
@ -2535,7 +2552,7 @@
* 图表事件支持函数绑定图表事件处理函数代理
* 注意此函数在图表渲染完成后才可调用
*
* 图表事件处理通常由内部组件的事件处理函数代理比如Echarts并在代理函数中调用图表事件处理函数
* 图表事件处理通常由内部组件的事件处理函数代理比如ECharts并在代理函数中调用图表事件处理函数
*
* @param eventType
* @param eventHanlder 图表事件处理函数function(chartEvent){ ... }
@ -2747,6 +2764,18 @@
// < 已弃用函数 start
//-------------
// < @deprecated 兼容2.6.0版本的API将在未来版本移除已被chartBase.internal()取代
/**
* ECharts图表支持函数获取/设置图表的ECharts实例对象
*
* @param instance 可选要设置的ECharts实例不设置则执行获取操作
*/
chartBase.echartsInstance = function(instance)
{
return this.internal(instance);
};
// > @deprecated 兼容2.6.0版本的API将在未来版本移除已被chartBase.internal()取代
// < @deprecated 兼容2.6.0版本的API将在未来版本移除已被renderOptions.processUpdateOptions取代参考chart.inflateUpdateOptions()函数)
/**
* 获取/设置图表更新时的图表选项格式为 { ... }
@ -3383,7 +3412,7 @@
};
/**
* 由图表主题构建echarts主题
* 由图表主题构建ECharts主题
*
* @param chartTheme 图表主题对象org.datagear.analysis.ChartTheme
*/

View File

@ -4186,13 +4186,13 @@
});
}
chartFactory.extValueBuiltin(chart, "chartTableId", tableId);
chart.internal(dataTable);
};
chartSupport.tableUpdate = function(chart, results, options)
{
var renderOptions = chart.renderOptions();
var dataTable = chartSupport.tableGetChartDataTable(chart);
var dataTable = chart.internal();
var chartEle = chart.elementJquery();
var chartDataSets = chart.chartDataSetsMain();
@ -4232,7 +4232,7 @@
chartSupport.tableResize = function(chart)
{
var chartContent = chartSupport.tableGetChartContent(chart);
var dataTable = chartSupport.tableGetChartDataTable(chart);
var dataTable = chart.internal();
chartSupport.tableEvalDataTableBodyHeight(chartContent, dataTable);
@ -4276,7 +4276,7 @@
{
var signNameMap = chartSupport.chartSignNameMap(chart);
var dataTable = chartSupport.tableGetChartDataTable(chart);
var dataTable = chart.internal();
var chartData = dataTable.row(rowElement).data();
@ -4301,12 +4301,12 @@
{
bind: function(chart, eventType, delegateEventHandler)
{
var dataTable = chartSupport.tableGetChartDataTable(chart);
var dataTable = chart.internal();
$(dataTable.table().body()).on(eventType, "tr", delegateEventHandler);
},
unbind: function(chart, eventType, delegateEventHandler)
{
var dataTable = chartSupport.tableGetChartDataTable(chart);
var dataTable = chart.internal();
$(dataTable.table().body()).off(eventType, "tr", delegateEventHandler);
}
};
@ -4319,12 +4319,6 @@
return $(".dg-chart-table-content", chart.element());
};
chartSupport.tableGetChartDataTable = function(chart)
{
var tableId = chartFactory.extValueBuiltin(chart, "chartTableId");
return $("#" + tableId, chartSupport.tableGetChartContent(chart)).DataTable();
};
chartSupport.tableGetColumnProperties = function(chart, columnSign)
{
var chartDataSet = chart.chartDataSetFirst();
@ -4460,7 +4454,7 @@
*/
chartSupport.tableAdjust = function(chart)
{
var dataTable = chartSupport.tableGetChartDataTable(chart);
var dataTable = chart.internal();
dataTable.columns.adjust();
if(dataTable.init().fixedHeader)
@ -4475,7 +4469,7 @@
chartSupport.tablePrepareCarousel = function(chart)
{
var chartContent = chartSupport.tableGetChartContent(chart);
var dataTable = chartSupport.tableGetChartDataTable(chart);
var dataTable = chart.internal();
var rowCount = dataTable.rows().indexes().length;
//空表格
@ -4515,7 +4509,7 @@
var renderOptions = chart.renderOptions();
var chartEle = chart.elementJquery();
var chartContent = chartSupport.tableGetChartContent(chart);
var dataTable = chartSupport.tableGetChartDataTable(chart);
var dataTable = chart.internal();
var rowCount = dataTable.rows().indexes().length;
@ -4692,7 +4686,7 @@
{
//将在update中设置
//data
//是否标签值在前
"valueFirst": false,
"label":
@ -4709,6 +4703,9 @@
}
},
options);
//标签卡无底层组件
chart.internal(null);
};
chartSupport.labelUpdate = function(chart, results)
@ -5327,11 +5324,9 @@
*/
chartSupport.destroyChartEcharts = function(chart)
{
var echartsInstance = chart.echartsInstance();
if(echartsInstance && !echartsInstance.isDisposed())
echartsInstance.dispose();
chart.echartsInstance(null);
var internal = chart.internal();
if(internal && !internal.isDisposed())
internal.dispose();
};
/**
@ -5339,10 +5334,9 @@
*/
chartSupport.resizeChartEcharts = function(chart)
{
var echartsInstance = chart.echartsInstance();
if(echartsInstance)
echartsInstance.resize();
var internal = chart.internal();
if(internal)
internal.resize();
};
chartSupport.chartSignNameMap = function(chart, signNameMap)
@ -5481,11 +5475,11 @@
{
bind: function(chart, eventType, delegateEventHandler)
{
chart.echartsInstance().on(eventType, "series", delegateEventHandler);
chart.internal().on(eventType, "series", delegateEventHandler);
},
unbind: function(chart, eventType, delegateEventHandler)
{
chart.echartsInstance().off(eventType, delegateEventHandler);
chart.internal().off(eventType, delegateEventHandler);
}
};