360°教你搞定“自定义控件开发”(开发规范篇)

1 业务场景
在自定义控件开发中,开发者经常会碰到一些问题。例如,自定义控件没有注册(代码中没有注册控件id)、自定义控件在IE11上没显示(使用了不兼容IE11的语法)。而事实上,这些问题都可以在开发自定义控件过程中避免。
为提高自定义控件开发效率,便于后期开发者添加功能及维护、输出高质量的自定义控件,本文将针对开发者经常碰到的问题,从准备工作、代码编写到打包上传三个方面,为开发者定制一份自定义控件的开发规范(包括务必遵守和推荐执行两方面)。
2 规范分类
强制:这些规范能够帮助开发者规避自定义控件开发过程中的错误,所以开发者必须严格遵守该类规范,从而避免不必要的错误。
推荐:这些规范能够改善自定义控件代码中的可读性和开发体验。即使开发者不遵循,代码仍然可以照常运行,但是推荐遵循该类规范。
3 准备工作
注册控件id名称【强制】
注册自定义控件时,控件id组成规则应为 `开发商标识-领域标识-控件名称` 以确保控件id的唯一性。同时,命名需采用小写方式,可以用中划线分隔或者使用小写驼峰命名,避免出现大写的控件id。
正例【emoji】:
// 开发商标识:kingdee,领域标识:hr,控件名称:search-box
KDApi.register('kingdee-hr-search-box', MyFunction)反例【emoji】:
// 这些都是不可取的
KDApi.register('SearchBox', MyFunction) // 控件id命名规则应为 `开发商标识-领域标识-控件名称`,且为小写
KDApi.register('kingdee_hr_search_box', MyFunction) // 控件id命名应该使用中划线分割4 代码编写
(1) `model.dom.innerHTML` 挂载页面元素【强制】
当自定义控件需要渲染页面元素时,必须使用 `model.dom.innerHTML` 挂载页面元素。
正例【emoji】:
KDApi.getTemplateStringByFilePath('./html/entry.html', model).then(function (result) {
model.dom.innerHTML = result
})反例【emoji】:
KDApi.getTemplateStringByFilePath('./html/entry.html', model).then(function (result) {
// 加载了html文件,并没有使用
})(2)禁止在jquery中使用es6/es7语法【强制】
es6/es7语法在IE11上兼容性极差。如果自定义控件项目没有经过babel转译,应避免使用es6/es7语法 (vue、react项目可使用)。
正例【emoji】:
function getName () {}反例【emoji】:
// es6语法在ie11上兼容性极差,如果项目没有经过babel转译,应尽量避免
const getName = () => {}(3)禁止定义全局变量【强制】
所有的变量都应该定义在函数作用域。这样可以避免污染全局变量,并且全局变量是不会被垃圾回收的,容易引起内存泄漏等问题。
正例【emoji】:
function getName() {
var name = '张三'
}反例【emoji】:
window.name = '张三'
(4)禁止使用reset.css等样式文件【强制】
严禁使用该类样式文件,因为此样式会重置页面上对应标签的样式。
反例【emoji】:
html,body,div,span {
margin:0;
padding:0;
border:0;
font-size:100%;
font:inherit;
font-weight:normal;
vertical-align:baseline;
}(5)禁止定义全局标签选择器【强制】
禁止使用全局标签选择器,以防止全局样式被污染。
正例【emoji】:
.search-box-header {
width: 100%;
}反例【emoji】:
div {
width: 100%;360°教你搞定“自定义控件开发”(开发规范篇)
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。



