6. 自定义图表和插件
6.1. 自定义图表
新建图表时,将图表类型选择为自定义,即可实现自定义图表。
自定义图表不能单独展示,需要将其添加到看板中, 并设置其dg-chart-renderer属性, 完全实现图表渲染器逻辑,才能正常展示。
对于非自定义类型的图表,也可以为其添加dg-chart-renderer属性, 从而重写图表的内置图表渲染器部分逻辑。
6.2. 自定义图表插件
1. 编写插件
新建一个UTF-8编码的plugin.json文件,格式为:
{
//插件唯一标识
id: "...",
//插件展示名称
nameLabel: "...",
//插件的数据标记定义,新建图表时即是使用它们设置数据标记,
//这样,在下面的chartRenderer处理逻辑中,即可获取期望标记的数据集结果数据
dataSigns:
[
{
//数据标记名
name: "...",
//数据标记展示名
nameLabel: "...",
//是否必须标记,值为:true、false
required: ...,
//是否可多次标记,值为:true、false
multiple: ...
},
...
],
//插件的图表渲染器
chartRenderer: 图表渲染器
}
2. 打包插件
将上述plugin.json文件添加到以其id值命名的ZIP压缩包内,例如:
my-chart-plugin-line.zip
|--plugin.json
3. 上传插件
以管理员账号登录系统后,点击主页右上角的按钮, 点击弹出菜单中的上传图表插件条目,打开上传页面后,将上述的自定义图表插件ZIP压缩包上传即可。
4. 使用插件
在图表管理页面点击[添加]按钮,选择上述自定义的图表插件,新建图表即可。
6.3. 图表渲染器
图表渲染器用于为自定义图表、自定义图表插件实现渲染逻辑,它的格式如下所示:
{
//可选,渲染图表函数是否是异步函数,默认为false
//chart 图表对象
asyncRender: true、false、function(chart){ ...; return true 或者 false; }
//必选,渲染图表函数
//chart 图表对象
render: function(chart){ ... },
//可选,更新图表数据函数是否是异步函数,默认为false
//chart 图表对象
//results 数据集结果对象数组
asyncUpdate: true、false、function(chart, results){ ...; return true 或者 false; }
//必选,更新图表数据函数
//chart 图表对象
//results 要更新的数据集结果对象数组
update: function(chart, results){ ... },
//可选,调整图表尺寸函数,希望图表支持dg-chart-auto-resize时应该定义
//chart 图表对象
resize: function(chart){ ... },
//可选,绑定图表事件处理函数,希望图表支持dg-chart-link、dg-chart-on-*时应该定义
//chart 图表对象
//eventType 事件类型,比如:"click"、"mouseover"等
//handler 图表事件处理函数,格式为:function(chartEvent){ ... }
on: function(chart, eventType, handler){ ... },
//可选,解绑图表事件处理函数
//chart 图表对象
//eventType 事件类型
//handler 图表事件处理函数引用
off: function(chart, eventType, handler){ ... },
//可选,销毁图表函数
//chart 图表对象
destroy: function(chart){ ... }
}
如果asyncRender返回true, 那么在render函数中完成异步操作后, 应该调用chart.statusRendered(true),表明已完成异步渲染。
如果asyncUpdate返回true, 那么在update函数中完成异步操作后, 应该调用chart.statusUpdated(true),表明已完成异步更新数据。
如果希望图表支持dg-chart-link特性, 那么对于on函数,应该构建规范的图表事件对象传递给图表事件处理函数。 通常的做法是:先捕获底层图表元素事件(比如Echarts事件、HTML事件),然后使用 chart.eventNewEcharts()、 chart.eventNewHtml()、 chart.eventData()、 chart.eventOriginalData() 构建 图表事件对象, 最后调用图表事件处理函数。