云苍穹自定义控件开发

正文

什么是自定义控件?

自定义控件,顾名思义即是开发者可以自己开发业务组件。苍穹本身提供比较丰 富的通用控件,业务控件。特殊业务场景下,系统提供的控件无法满足需求,例如需要 使用甘特图,时间轴等系统内本身没有的组件,此时通过自定义控件,按照苍穹自定义 控件的标准封装,即可把这些组件引入到系统中。自定义控件也有特定的JAVA插件事 件,在表单插件中可以轻松获取到自定义控件的数据或者往自定义控件中传入值。

自定义控件的封装

一个完整的自定义控件目录:

  • css 存放自定义控件的样式

  • html存放自定义控件的html片段

  • js 存放自定义控件的js文件

  • index.js 为自定义控件的主要文件

index.js方法

(function(KDApi, $) {
    function MyComponent(model) {
        this._setModel(model);
    }

    MyComponent.prototype = {
        _setModel: function(model) {
            this.model = model;
        },
        init: function(props) {
            console.log('-----init', this.model, props);
        },
        update: function(props) {
            console.log('-----update', this.model, props)
        },
        destoryed: function() {
            console.log('-----destoryed', this.model)
        }
    }
    KDApi.register('avatar_map', MyComponent)
})(window.KDApi, jQuery);

生命周期

  • init() 控件初始化触发,只调用一次,常用于控件渲染,资源文件加载

  • update() 后台插件设置控件值变化时触发,用以更新控件

  • destoryed() 控件销毁,只调用一次

index.js 参数详解

控件参数:

  1. model

模型对象,自定义控件默认提供,值不能修改,其中包含以下内容 :

  • pageId 页面标识

  • key 控件标识

  • dom 自定义控件挂载的dom元素对象

  • schemaId 方案id

  • isvId 开发商标识

  • moduleId 领域标识

  • invoke 函数,将自定义控件事件发送给平台后端,接收两个参数:

  • eventName 执行事件名称,

  • eventArgs(String|Object) 执行事件所需参数,推荐使用字符串

  1. prop

自定义控件数据对象,其中包含以下内容:

  • themeColor 主题色

  • lock 是否锁定

  • data 数据对象,插件中setData接口设置的数据

  • configItems 控件配置项

  • cardRowData 卡片行数据

init

init为自定义控件的初始化事件,常用于对控件渲染,状态的设置

  • 在init事件中可调用框架方法加载html,css,js等资源文件, 加载完毕后即可按照第三方组件的规范创建控件
update

update事件,自定义控件接收到服务端的数据触 发此事件

  • 在后台插件中调用:
CustomControl control = this.getControl("customcontrolap"); control.setData("xxxxxx");

即会触发自定义控件的update事件

参数 prop

自定义控件数据对象,其中包含以下内容:

  • themeColor 主题色

  • lock 是否锁定

  • data 数据对象,插件中setData接口设置的数据

  • configItems 控件配置项

  • cardRowData 卡片行数据

destory
  • 自定义控件销毁事件 控件被销毁时会调用,一般不需要做什么操作
KDApi.loadFile(path,model,callBack)

将js、css文件加载到苍穹前端,参数:

  • filePaths: String|Array ,模版文件路径,可以是单个文件,也可 以是多个文件路径数组,必填,文件路径为相对路径

  • model: Object 组件的model对象,必填

  • callback: Function 回调函数,文件加载完成后进入回调,必填

KDApi.templateFilePath(path,model,callBack)

通过文件路径加载HTML片段:

  • filePath: String 模版文件路径,文件路径为相对路径,必填 +

  • Mod78 el: Object 组件的model对象,必填

  • data: Object 模版所需数据对象,必填

KDApi. template(tpl,data)

通过传入字符串加载HTML片段:

  • tpl: String 模版的html片段,必填

  • data:模版所需数据对象,必须。例如资源文件 的地址

KDApi. getNameSpace(model)

获取当前服务的路径前缀: 常用来加载添加拼接图片地址

  • Model :object ,组件的对象,必填
KDApi.register(type , ctrl)

将自定义控件注册到苍穹平台中,所有自定义控件 都需调用,接收两个参数

  • type: String 组件标识,必须,值与方案ID相同

  • ctrl: Object 组件对象,必须,需包含init方法的组件对象

服务端控件编程模型

@KSObject
@DataEntityTypeAttribute(name = "kd.bos.ext.form.control.CustomControl")
public class CustomControl extends Control {
    @KSMethod
    public String getData() {
        IClientViewProxy proxy = (IClientViewProxy) this.view.getService(IClientViewProxy.class);

        return (String) proxy.getViewState(this.getKey());
    }

    @KSMethod
    public void setData(Object data) {
        IClientViewProxy proxy = (IClientViewProxy) this.view.getService(IClientViewProxy.class);
        proxy.setFieldProperty(this.getKey(), "v", data);
        proxy.postBack(this.getKey(), data);
    }

    @KSMethod
    public void setConfigItems(List<Map<String, String>> items) {
        if ((items != null) && (items.size() > 0)) {
            IClientViewProxy proxy = (IClientViewProxy) this.view.getService(IClientViewProxy.class);
            proxy.setFieldProperty(this.getKey(), "ci", items);
        }
    }
}

自定义控件的后台编程模型,提供以下方法:

  • getData: 返回自定义控件当前的值

  • setData: 设置自定义控件的值,将触发前端的update方法

  • setConfigItems:设置自定义插件的配置

如何使用?

自定义控件可放置在以下容器:

  • 页面容器

  • Flex面板

  • 高级面板

  • 分割容器

  • 页签控件

使用步骤:

  1. 将自定义控件拖拽到合适的容器

  2. 点击控件方案属性,选择控件方案后返回数据

使用步骤:

  1. 选择方案时可点击新增方案

  2. 方案id必须和自定义控件index.js中 KDApi.register('avatar_xxx', MyComponent)注册的id一致,否则无法加载

  3. 领域ID填写相关领域即可,例如hr,fi,注意:填写后 即保存会在静态资源文件下创建同名文件夹

  4. 开发商标示自动根据当前开发商填写 tips:点击开发文档超链接,可下载自定义控件开发指南

以上就是我关于 云苍穹自定义控件开发 知识点的整理与总结的全部内容。


分割线

还有 5% 的精彩内容
©著作权归作者所有,转载或内容合作请联系作者
支付 ¥9.90 继续阅读
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,904评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,581评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,527评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,463评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,546评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,572评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,582评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,330评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,776评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,087评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,257评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,923评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,571评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,192评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,436评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,145评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,127评论 2 352

推荐阅读更多精彩内容