电脑桌面
添加蚂蚁七词文库到电脑桌面
安装后可以在桌面快捷访问

360°教你搞定“自定义控件”(高级技巧篇)

来源:金蝶云社区作者:金蝶2024-09-234

360°教你搞定“自定义控件”(高级技巧篇)


通过学习《360°教你搞定“自定义控件”(入门篇)》《360°教你搞定“自定义控件”(进阶篇)》《360°教你搞定“自定义控件”(API手册)》系列文章,小黑已经可以熟练玩转自定义控件的开发。不过学无止境,小黑从白老师那又学到了一些自定义控件的高级开发技巧,就迫不及待地想来分享了。


本篇给大家介绍自定义控件的三个高级技巧:自定义控件嵌入表单自定义控件多语言方案自定义控件本地调试




技巧一 自定义控件嵌入表单


很多小伙伴会问到自定义控件如何使用苍穹内部的标准控件,这里小编给出答复:


自定义控件暂不支持使用平台标准控件。但但但!!!但是,自定义控件支持使用标准表单。要如何使用呢?带着疑惑,和小编一起往下看。


在使用前要明确两个概念:


1.elementId:自定义控件里面的元素id,也就是说,需要把表单插入到自定义控件的某个节点元素的id中。


2.targetKey:自定义控件id。通过targetKey找到对应的自定义控件。


在自定义控件中,通过showForm指令的方式嵌入标准表单,类型为InContainer,目标容器是自定义控件的elementId。


插件示例如下:


FormShowParameter parameter = new FormShowParameter();
parameter.setFormId(formId);
parameter.setShowTitle(false);

parameter.getOpenStyle().setShowType(ShowType.InContainer);
parameter.getOpenStyle().setTargetKey('自定义控件id');

Map<String, String> customParams = new HashMap<>();
customParams.put("elementId", '自定义控件里面的元素id');
parameter.getOpenStyle().setCustParam(customParams);

this.view.showForm(parameter);


技巧二 自定义控件多语言方案


1.在KDApi.register设置开启多语言功能,示例如下:


/*
  * KDApi.register新增第三个参数:config,object类型,没有传入时默认为空
  * isMulLang:是否使用多语言, 默认为false
*/
KDApi.register('dellabel', MyComponent, {
  isMulLang: true
})


2.在自定义控件根目录下,新建lang文件夹,lang文件夹下面新建zh_CN.json和en_US.json,用于表示多语言的文本。


新建lang目录

在lang文件下新建zh_CN.json文件


将index.js的中文词条抽出,放在zh_CN.json中,例如:zh_CN.json:{  "steps.key0001": "简单的步骤条" }。然后,将中文词条翻译为对应的多语言词条,例如:en_US.json:{"steps.key0001": "simple step bar"}。


3.使用KDApi.getLangMsg(model, key) 获取对应的文本。


以下以自定义控件dellabel为例,代码中有中文词条”标签“,则可在zh_CN.json文件写成如下形式:


{
    "dellabel.key0001": "标签1",   // 假如这是第一个词条
    "dellabel.key0002": "标签2"   // 假如这里有第二个词条
    "dellabel.key0003": "标签3{date}" // 假如这里有第三个词条,且词条里面含有一个变量date
    "dellabel.key0004": "标签4{date}, {text}" // 假如这里有第四个词条,且词条里面含有两个变量:date和text
}


在代码中,词条的位置如下所示:


代码中词条位置示例


同时,需要将“标签”改成KDApi.getLangMsg(model, 'dellabel.key0001'),示例如下:


var updateHtml = function(model, props){
  var lang = model.lang  // 获取自定义控件所在单据语言环境,默认中文
  var template = '<div class="hr-delLabel" title="<%= text %>">' +
                      '<div class="hr-delLabel-text">' +
                          '<%= text %>' +
                      '</div>' +
                      '<div class="hr-delLabel-icon"></div>' +
                  '</div>';
  var result = KDApi.getHTMLStringBytemplate(template, {
      text: props.data && props.data['text'] ? props.data['text'] : props.configItems ? props.configItems[0].value : KDApi.getLangMsg(model, 'dellabel.key0001')
      /*
        * KDApi.getLangMsg(model, 'dellabel.key0003', { date: new Date() })
        * KDApi.getLangMsg(model, 'dellabel.key0004', { date: new Date(), text: '文字内容' })
      */
  })
  model.dom.innerHTML = result;
  initEvent(model, props);
}



技巧三 自定义控件本地调试


1.使用NodeJS的express模块建立一个静态资源服务,示例如下:


// server.js
const express = require("express"); // npm i --save express
const app = express();
const path = require('path')
const serveIndex = require('serve

360°教你搞定“自定义控件”(高级技巧篇)

通过学习《360°教你搞定“自定义控件”(入门篇)》、《360°教你搞定“自定义控件”(进阶篇)》、《360°教你搞定“自定义控件”(API手...
点击下载文档文档为doc格式

声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。

确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息
QQ群
  • 答案:my7c点击这里加入QQ群
支持邮箱
微信
  • 微信