自定义控件开发文档
自定义控件简介
如果我们默认提供的控件类型不足以满足您的需求,您可以根据自己的需求自己实现一个新的控件类型,并将其引入到我们的环境中。实现自定义控件主要需要完成以下几个部分。
- 控件定义
- 控件初始化
- 实现控件视图更新方法
- 引入到小智BI中
- 与设计器属性面板结合
- 获取数据
自定义控件实现
1.控件定义
首先我们创建一个js文件,并在文件中定义一个继承自XZChart的类,在这个例子中我们将类的命名为Keyframes。
然后我们在类中实现一下definition方法,在这个方法中,我们可以对控件的基本属性进行设置,比如控件类型等,控件类型是必填值,该值需要唯一。其它更多的参数请查看注释里的说明
class Keyframes extends XZChart {
definition() {
this.definitions.type = 'keyframes'
}
// definitions中各属性说明如下
/**
definitions 的说明
type, //控件类型 String 例 "InputFilter" default:''
jsonConfig, //json配置 Object default:{}
width, //控件宽度 String 例 '200px' default:'960px'
height, //控件高度 String 例 '200px' default:'540px'
defaultOption, //控件默认配置项 Object default:{}
indexCount, //需要维度字段数 Array | number 例 0 -1 [0,-1] default:0
columnCount, //需要度量字段数 Array | number 例 0 -1 [0,-1] default:0
indexName, //维度实际显示名字 String 例 维度 字段 显示值值 指标 default:'维度'
columnName, //度量实际显示名字 String 例 度量 字段 实际值 指标 default:'度量'
designerScale, //控件显示类型 Number 例 1 2 1 -> 缩放填充 2 -> 保持控件的宽高 default:1
useXSelector, //是否需要X选择器 Boolean 例 true false default:true
showDataSheet, //是否显示数据集 Boolean default:true
showDataConfig //是否显示控件选择器 数据过滤器 标签提示字段 default:true
noDataRender // 没有数据时是否渲染
isFilterChart // 是否是过滤器控件
multiIndex // 多个维度
*/
}
2.控件初始化
在初始化函数中,我们可以完成控件dom树的构建等操作,该办法会有控件实例化成功后被调用,该方法只会被调用一次。
在这个例子中我们在控件中放一个div,并显示一行文字。
init() {
// this.controlEl.el; //控件主体元素 基于基础类上
let controlEl = this.controlEl.el;
this.el = document.createElement('div');
this.el.innerHTML = `这是一个自定义控件`;
controlEl.appendChild(this.el);
}
3.实现视图更新方法
视图更新方法是一个控件最核心的办法,该办法会现控件初始化完成后、数据更新、联动事件响应等各种需要更新视图的时候被调用。在该方法中我们需要根据我们的需求来更新dom。
比如我们可以将文字的颜色改成红色。
render() {
this.el.style.color = '#F00';
}
4.引入到小智BI中
控件定义好后,我们需要引入到小智BI中,才能在BI中使用它们。小智BI设计器和展现端有初始化方法中有一个option字段,我们通过设置该字段中的customModules来完成对自定义控件的引入。
以设计器端为例,主要代码如下:
//引入Keyframes.js 可得到一个window.Keyframes;
//用于option.customModules.module;
<script src="./Keyframes.js"> </script>
<script>
let option = {
customModules: [ //自定义控件的重要参数
{
"text": "测试", //自定义控件 名称 用于该控件在控件列表中显示
"type": "keyframes", //自定义控件 类型 用于添加该控件时传递
"icon": "ce.png", //自定义控件 图标 用于该控件在控件列表中显示
"module": Keyframes // 自定义控件 实现的方法(类)
}
],
}
let design = XZChartDesigner('#chartDesigner', option);
</script>
5.与设计器属性面板结合
将自定义控件引入到小智BI中后,我们可以利用设计器里的属性面板来给用户提供修改控件样式的方法。完成这个功能我们需要以下步骤。
- 定义在属性面板中显示的配置项
- 获取用户配置的值并使用
这个例子中,我们希望让用户可以修改文字的颜色。