-----------------------------------------------------------------------------------------------------------------------
声明一下下:
由于这些东西是我刚写好就贴上来的,没怎么详细的测试过,有BUG那是必须的,这里仅起到抛砖引玉的作用
如果有什么问题,大家可以联系我 wjm_0729@yahoo.cn 或直接评论, 谢谢!!
文章中后端技术是用的 Nutz http://nutzam.com/ --- 除SSH之外的另一种选择 (打个小广告,哈哈!!)
------------------------------------------------------------------------------------------------------------------------
用过Ext的都知道,最TM麻烦的莫过于调表单项的坐标了(当然是在你的表单布局为absolute的时候,但是企业应用还就是大多数需求都得用它才行得通--只是我自己的看法,可能是我不熟悉界面美化和用户体验的原因)。有时候调一个表单项坐标时你得同时调他的label的坐标,那个汗。。。。真是痛不欲生.....
为此,我写了下面的这个东东
/**
* 继承自 Container
* 默认功能配置项:
*
* @class SteelField
* @extends Container
*
* 部分特定配置方法如下(其他的和XXXField一样):
* ------------------------------------------
* xhide: 标签是否显示(注意:如果xhide为true,则控件在表单的位置将由随后的控件所占据,其默认值将由xvalue指定)
* xvalue: 控件影藏时,表单提交的值。默认为 null
* fieldLabel: 标签
* labelWidth:(可选)标签的宽度,默认为文字长度+1 * 12 像素
* labelAlign:(可选)标签位置,默认靠左
* inputWidth:文本框宽度,默认 100 像素
* type: (text/number/date/date2/combo/steelcombogird)控件类型,默认为 text
* ------------------------------------------
*/
Ext.SteelField = Ext.extend(Ext.Container, {
xhide : false,
xvalue : null,
isFormField : true,
autoHeight : true,
initComponent : function() {
Ext.SteelField.superclass.initComponent.call(this);
},
constructor : function(options) {
Ext.apply(this, options);
Ext.SteelField.superclass.addEvents.call(this);
//文本框类型 xtype
var typeMap = {
text : 'textfield',
area : 'textarea',
number : 'numberfield',
date : 'datefield',
combo : 'combo',
combogrid : 'steelcombogird',
date2 : 'steel2date'
}, fieldType = typeMap[this.type || 'text'];
this.labelAlign = 'left';
if(fieldType=='textarea'){
this.height = options.height ? options.height : 22;
options.height = this.height;
}
if(this.xhide){
this.field = new Ext.form.Hidden(Ext.applyIf({
value: this.xvalue || null
}, options));
this.hidden = true;
this.width = 0;
this.height = 0;
}else{
this.layout = 'form';
this.defaults = {
labelSeparator : Steel.LABELSEPARATOR,
labelStyle : Steel.LABELSTYLE
};
this.margins = Steel.LABELMARGINS;
//标签宽度
if (this.fieldLabel) {
//计算fieldLabel里面包含的西文字符数
var ec = 0;
for(var i = 0, l = this.fieldLabel.length; i < l; ++i){
if(/[a-zA-Z0-9]/.test(this.fieldLabel.substring(i,i+1))){
ec++;
}
}
this.labelWidth = this.labelWidth
|| eval('Math.ceil((this.fieldLabel.length + 1) * ' + Steel.LABLEFACTOR + ')') - ec*5;
this.width = this.labelWidth + (this.inputWidth || Steel.DEFAULTFIELDWIDTH);
}else{
this.labelWidth = 0;
this.width = this.inputWidth || Steel.DEFAULTFIELDWIDTH;
}
this.field = Ext.create(Ext.applyIf({
xtype : fieldType,
width : this.inputWidth || Steel.DEFAULTFIELDWIDTH
}, options));
}
this.items = [this.field];
//灰掉只读项
if(this.readOnly)
this.setDisabled(true);
//获得相应控件的属性方法 Field 和 XXXField 的特有属性
Ext.applyIf(this,this.field.prototype);
Ext.SteelField.superclass.constructor.call(this);
},
getText : function() {
return this.field.fieldLabel;
},
setText : function(t){
this.fieldLabel = t;
this.doLayout();
}
});
Ext.reg('steelfield', Ext.SteelField);
代码当中有几个控件也是自定义的,如 'steelcombogird' 'steel2date' 还有'steelcombotree'等几个自定义控件没有加上去,当然这个列表会越来越长的.....
你可以这样使用她
{
name:'222'
,xtype:'steelfield'
,type:'date' //你的实际控件的xtype
,fieldLabel:'哈哈哈哈哈哈哈哈aaaaaaAAAAA' //标签文字
//,labelWidth: 65 //【可选】这是标签的宽度,控件默认会给你算好的,
,inputWidth: 170 //文本域的宽度
},
效果如下图所示:
这里推荐你使用hbox布局,因为他书写简单,当然你可以选择使用其他的布局,只要你喜欢
在我写完这个控件时,我才发现其实Ext的ux控件库里面有相关的插件 FieldLabeler.js 但他是以插件的形式工作的
我觉得还不如我这个东西好用,至少我的代码量比她小(开发时的代码量)
- 大小: 4.5 KB
分享到:
相关推荐
在给定的标题"封装ElementUI组件el-tree"中,我们聚焦于`el-tree`组件的封装,这通常是为了提高代码复用性、简化使用过程以及统一项目中的样式和行为。 `el-tree`是ElementUI中的树形控件,用于展示层次结构的数据...
- **组件模型**:EXT JS的核心是组件化,它将页面元素抽象为组件,每个组件都有自己的属性、事件和方法,可以灵活组合和扩展。 - **布局管理器**:EXT JS提供了多种布局方式,如Fit、Border、Form、Table等,适应...
- EXT提供了便捷的方法来选择和操作多个DOM节点,增强了对页面元素的控制能力。 #### 2.3 响应事件 - 通过EXT,可以轻松绑定和处理DOM事件,使得响应用户交互更加灵活高效。 ### 使用Widgets #### 3.1 MessageBox ...
同时结合了中兴通讯内部的其他相关标准,如Q/ZX04.100.2-2001《印制电路板设计规范——工艺性要求》和Q/ZX04.100.4-2001《印制电路板设计规范——元器件封装库基本要求》。所有引用标准均采用最新的在线版本。 ####...
vue之封装自己的日历组件-高级篇视频 封装自己的组件
在IT行业中,Vue.js是一个非常流行的...通过这个项目,开发者不仅可以学习到如何利用Vue.js进行组件封装,还能掌握如何集成UI库来优化用户体验,以及如何实现国际化功能。这有助于提升开发者在实际项目中的技能和效率。
Ext 框架的核心组件包括adapter、build、docs、examples、resources、source 等。adapter 负责将里面提供第三方底层库(包括 Ext 自带的底层库)映射为 Ext 所支持的底层库。build 是压缩后的 ext 全部源码。docs 是...
4. **Ext.DomQuery, DomHelper, Template**: `EXT核心API详解(四)-Ext.DomQuery DomHelper Template.txt`涵盖了查询DOM元素的`Ext.DomQuery`(类似于jQuery的selector),动态创建和操作DOM的`DomHelper`,以及...
总的来说,"slide-ruler二次封装后的组件"是一个针对原生slide-ruler组件进行定制化开发的产品,它能够更好地适应特定项目的需求,提供更加个性化的用户体验。通过深入理解和利用"csRuler"文件,开发者可以轻松地将...
例如,当用户通过前端提交代码更改时,后端可以利用`git_ext`来处理这些更改并更新远程仓库。 ### 总结 `git_ext-0.6.0-py2-none-any.whl`是一个面向Python 2的Git操作库,为开发者提供了一种更便捷的方式来处理...
在给定的文件中,展示了如何利用Element UI库来封装`el-table`和`el-form`组件,这两个组件在管理系统的界面中非常常见,特别是用于数据展示和表单提交。 首先,我们关注`el-form`组件的封装。`el-form`用于创建...
总结来说,封装`el-pagination`为公用组件涉及的主要步骤有:创建新组件,引入并配置el-pagination,定义并接收props,处理事件,以及设置和使用语言包。通过这种方式,我们可以实现分页组件的复用,同时支持多语言...
"基于element组件库封装的动态表单组件"就是这样一个解决方案,它针对Vue3进行了优化,旨在帮助开发者更方便地创建和管理动态表单。 动态表单是一种能够根据数据结构自动生成表单的组件,通常用于处理复杂的表单...
今天,我们要探讨的是一个名为"abjad-ext-tonality"的Python库,它在PyPI(Python Package Index)官网上可以下载到的最新版本为3.0.0a0,封装在一个名为"abjad-ext-tonality-3.0.0a0.tar.gz"的压缩包中。...
它在压缩效率上显著优于其前代,如MPEG-4 Part 2和H.263,能以更低的比特率提供高质量的视频。H.264编码的视频通常以裸流(即未封装的二进制数据)的形式存在,需要被封装到一个容器格式中以便传输和播放。 FLV是...
各种单双排针排座封装(1.27mm、2.0mm、2.54mm间距),匹配伍尔特料号
1、后台管理系统用到的表格、分页很多,所以不能每个页面都写一次,通过组件通讯方式封装 2、项目选型:vite + ts + vue3 3、全篇采用语法糖形式 4、通过带着读者手写简化版 封装技巧,了解 核心原理。全文极简备注...
首先,我们来关注**JDBC封装**。Java Database Connectivity (JDBC) 是Java编程语言连接数据库的标准API。在实际开发中,直接使用JDBC进行数据库操作会涉及很多重复的代码,例如打开与关闭连接、预编译SQL语句、处理...
本文将详细讲解关于"ext grid 封装"的知识点,以及如何通过`grid.js`来实现UI的便捷调用。 1. ExtJS Grid组件: - Grid组件是ExtJS的核心组件之一,用于显示表格数据,支持排序、分页、筛选等多种功能。 - 它由一...