1. 克隆内置组件并修改
2. 制作一个自定义统计图
点击取数定义后,在弹出的对话框中,点击 "+" 号,就可以实现变量的创建,变量设定完毕后,点击 "确认" 保存。
所有的取数,在js代码中,都会以字符串的形式存放在 "vardata" 参数中,例如上图中,想使用 item 参数,就要写成 vardata.item 。
组件属性:
“属性”是指,在编辑界面的右侧,可以根据编辑人员的需求,来改变参数,如右图的“上下文组件”中,四个属性都是通过左图中 “+” 自定义的属性,前面7个属性是组件默认的属性,从第八条开始才是你自己新建的组件属性。
对于一个属性而言,左图红圈中的五项很重要。
1)“属性名称”可以理解为,你在写js代码时,在 “setProperty” 方法中传入的 “key” 值。
2)“属性标题”是指在右侧属性面板上这个属性的名称,例如右图红框里面的,都是标题属性。
3)“类型”分为很多种,右图红框属性的类型,就是输入框,编辑者自己敲自己需要的内容,类型一共有11种,如下图。
4)“编辑” ,指是否能在右侧属性面板,对该属性进行写操作,不勾选,该属性就是不可写状态
5)“显示”,如果勾选了,该属性就会显示在属性面板上,不勾选,则该属性不显示在属性面板
事件:“事件”的只是提供一个接口,实现这个接口的,是你组件的使用者。
插入图片:插入图片,简单来讲就是,把你所需要的图片素材,从本地上传到vfs服务器上的过程,点击上传图片,选择所需要上传的图片就行了,单击所需要的图片,点击“确定”就可以将图片插入了。
这里值得一说的是,“图片管理”的默认界面,显示的都是“用户图标”,如下图,而“系统图标”点击后,所显示的图片就是系统自带的,一般用户并不能往系统图标里上传图片。
预览:“预览”按钮点击后,会显示你的组件目前的效果
总结:开发自定义组件流程
1)新建酷屏组件
2)设计取数定义
3)考虑需要的属性,并留好接口
4)通过你掌握的html、js、css知识,依次写好对应的三个文件
5)插入图片素材
6)点击预览,看你的组件效果
7) 检查你的组件、debug,若符合要求就点击“保存”。
至此,一个酷屏组件就编写完毕了
3. 引用第三方组件
- var myChart = null;
- var myData = null;
- var myProperty = null;
- var myEvents = null;
- /*
- * 初始化方法
- *
- * @params cwidget 组件对象
- * @params vardata 取数定义中定义的变量,json格式:{'var1':'xxx'}
- * @params storagedata 组件自己需要存储的值,字符串格式
- * @params events 事件,用户在右边属性上设置的事件, json格式:{'evt1': function(){...}, 'evt2':function(){....}}
- * @params resources 资源及权限校验,json格式:{'resids': ['EBI$12$xxx$1$xxx.rpttpl','EBI$12$xxx$1$xxx.coolrpt'], 'pms': [true, false]}
- */
- function init(cwidget, vardata, events, storagedata, resources) {
- var basedom = cwidget.basedom, doc = cwidget.wnd.document;
- myEvents = events;
- initMyData(vardata);
- getValue(cwidget);
- if (!window["GISMap"]) {
- EUI.include("vfs/root/products/ebi/sys/coolrpt/coolresource/js/gismap.js");
- }
- var src = "http://api.map.baidu.com/getscript?v=2.0&ak=XS9zbYnYu6dylRK6hGutsZh6";
- if (EUI.findScript(doc, src) == -1) {
- EUI.addScript(doc, src, function () {
- initMap(cwidget);
- });
- } else {
- initMap(cwidget);
- }
- }
- function addEvent() {
- myChart.addEvent4AllMarker("click", myEvents["markerClick"]);
- myChart.addEvent4map("click", myEvents["mapClick"]);
- }
- /**
- * 初始化搜索框
- */
- function initSearchDom(basedom) {
- var searchDiv = document.createElement("div");
- searchDiv.className = "gis_search";
- searchDiv.style.zIndex = 100;
- basedom.appendChild(searchDiv);
- var inputDom = document.createElement("input");
- inputDom.type = "search";
- searchDiv.appendChild(inputDom);
- var rightDiv = document.createElement("div");
- rightDiv.className = "gis_rightIcon";
- searchDiv.appendChild(rightDiv);
- }
- function initMap(cwidget) {
- var basedom = cwidget.basedom;
- myChart = new GISMap(basedom);
- var opt = getMyOption();
- myChart.setOption(opt);
- myChart.setZoom(myProperty["zoomN"]);
- initSearchDom(basedom);
- initMyEvent(basedom);
- if (cwidget.isresultview) {
- //只在结果界面的时候执行,例如只想在结果界面绑定click事件
- addEvent();
- }
- }
- function initMyEvent(basedom) {
- var inputDom$ = $(basedom).find(".gis_search input"),
- iconDom$ = $(basedom).find(".gis_search .gis_rightIcon");
- myChart.addAutoComplete(inputDom$[0]);
- iconDom$.click(function () {
- var value = inputDom$[0].value;
- myChart.searchPlace(value);
- });
- }
- /**
- * 初始化数据
- */
- function initMyData(vardata) {
- if (!vardata) return;
- myData = {};
- Object.keys(vardata).forEach(function (ele) {
- try {
- myData[ele] = JSON.parse(vardata[ele]);
- } catch (error) {
- myData[ele] = vardata[ele];
- }
- });
- }
- /**
- * 返回参数
- */
- function getMyOption() {
- var opt = {};
- opt.city = myData["city"];
- var color = myProperty["color"];
- opt.overlays = [{ name: myData["city"], color: color[0] }];
- var names = myData["name"], points = myData["point"];
- var iconUrl = myProperty["iconUrl"], size = myProperty["size"],
- hightIconUrl = myProperty["hightIconUrl"], hightSize = myProperty["hightSize"];
- opt.pointObjs = points.map(function (ele, index) {
- return {
- name: names[index],
- point: ele,
- icon: getIcon(iconUrl, size),
- hightIcon: getIcon(hightIconUrl, hightSize)
- };
- });
- return opt;
- }
- function getIcon(iconUrl, size) {
- if (!iconUrl || !size) return;
- return {
- url: iconUrl,
- size: { width: size[0], height: size[1] }
- }
- }
- /**
- * 定义了自定义属性时,必须实现该方法,方法名为setProperty
- * 当在属性面板上修改属性后,会调用该方法
- * @param key 属性名
- * @param value 属性值
- * @param cwidget 组件对象
- * @returns
- */
- function setProperty(key, value, cwidget) {
- if (key === 'zoomN') {
- value = JSON.parse(value);
- myChart.setZoom(value);
- } else if (key === 'yyy') {
- }
- }
- /**
- * 刷新操作,数据改变时,调用该方法,重新渲染数据
- * @param cwidget 组件对象
- * @param vardata 取数定义中定义的变量,json格式:{'var1':'xxx'}
- * @param storagedata 组件自己需要存储的值,字符串格式
- * @returns
- */
- function refreshDatas(cwidget, vardata, storagedata) {
- var basedom = cwidget.basedom;
- }
- /**
- * 组件大小改变时执行
- * @param cwidget 组件对象
- * @returns
- */
- function resize(cwidget) {
- }
- /**
- * 获取组件的参数值
- * @param cwidget 组件对象
- * @returns
- */
- function getValue(cwidget) {
- myProperty = {
- "color": JSON.parse(cwidget.getProperty("color")),
- "iconUrl": cwidget.getProperty("iconUrl"),
- "hightIconUrl": cwidget.getProperty("hightIconUrl"),
- "size": JSON.parse(cwidget.getProperty("size")),
- "hightSize": JSON.parse(cwidget.getProperty("hightSize")),
- "zoomN": JSON.parse(cwidget.getProperty("zoomN"))
- };
- }
- /**
- * 获取组件的参数名称
- * @param cwidget 组件对象
- * @returns
- */
- function getParamName(cwidget) {
- }
- /*
- * 销毁操作,销毁自己相关的东西
- */
- function dispose(cwidget) {
- if (myChart)
- myChart.dispose();
- myChart = null;
- myData = null;
- myProperty = null;
- myEvents = null;
- }
4. 导出/导入组件
导出组件:选中需要导出的组件——>右键——>导出即可
如果想导出整个分组下的组件,可以直接在分组上右键,然后选择导出,即可把分组下的所有组件一起导出
导入:选择需要导入的分组,或者在选中自定义组件,然后右键,选择导入,选择要导入组件的zip文件,然后点确定即可
请先登录