`
wjm0729
  • 浏览: 15466 次
  • 性别: Icon_minigender_1
  • 来自: 湖南
社区版块
存档分类
最新评论

自己来封装Ext组件4--SteelField

 
阅读更多

-----------------------------------------------------------------------------------------------------------------------

声明一下下:

由于这些东西是我刚写好就贴上来的,没怎么详细的测试过,有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

    在给定的标题"封装ElementUI组件el-tree"中,我们聚焦于`el-tree`组件的封装,这通常是为了提高代码复用性、简化使用过程以及统一项目中的样式和行为。 `el-tree`是ElementUI中的树形控件,用于展示层次结构的数据...

    ext-cn-js-beta

    - **组件模型**:EXT JS的核心是组件化,它将页面元素抽象为组件,每个组件都有自己的属性、事件和方法,可以灵活组合和扩展。 - **布局管理器**:EXT JS提供了多种布局方式,如Fit、Border、Form、Table等,适应...

    EXT-In-FirstStep

    - EXT提供了便捷的方法来选择和操作多个DOM节点,增强了对页面元素的控制能力。 #### 2.3 响应事件 - 通过EXT,可以轻松绑定和处理DOM事件,使得响应用户交互更加灵活高效。 ### 使用Widgets #### 3.1 MessageBox ...

    中兴PCB元件封装库命名规范-IPC7351

    同时结合了中兴通讯内部的其他相关标准,如Q/ZX04.100.2-2001《印制电路板设计规范——工艺性要求》和Q/ZX04.100.4-2001《印制电路板设计规范——元器件封装库基本要求》。所有引用标准均采用最新的在线版本。 ####...

    vue之封装自己的日历组件-高级篇视频

    vue之封装自己的日历组件-高级篇视频 封装自己的组件

    vue 封装grid 布局-表单.zip

    在IT行业中,Vue.js是一个非常流行的...通过这个项目,开发者不仅可以学习到如何利用Vue.js进行组件封装,还能掌握如何集成UI库来优化用户体验,以及如何实现国际化功能。这有助于提升开发者在实际项目中的技能和效率。

    PyPI 官网下载 | djorm-ext-pgfulltext-0.4.0.tar.gz

    这个资源的全名揭示了它的主要功能和版本信息,即djorm-ext-pgfulltext库的0.4.0版本,封装在tar.gz压缩格式中。 djorm-ext-pgfulltext是一个专门为Python Django框架设计的扩展库,其核心目标是为Django应用程序...

    Ext API详解--笔记

    4. **Ext.DomQuery, DomHelper, Template**: `EXT核心API详解(四)-Ext.DomQuery DomHelper Template.txt`涵盖了查询DOM元素的`Ext.DomQuery`(类似于jQuery的selector),动态创建和操作DOM的`DomHelper`,以及...

    LQFP-48 封装尺寸图ST-48.pdf

    LQFP-48封装是电子行业中常见的一种封装方式,主要应用在集成电路封装领域,LQFP是“Low Profile Quad Flat Package”的缩写,翻译成中文为“低剖面四平面封装”,48表示该封装类型具备48个引脚。LQFP封装因其具有很...

    Python库 | git_ext-0.6.0-py2-none-any.whl

    例如,当用户通过前端提交代码更改时,后端可以利用`git_ext`来处理这些更改并更新远程仓库。 ### 总结 `git_ext-0.6.0-py2-none-any.whl`是一个面向Python 2的Git操作库,为开发者提供了一种更便捷的方式来处理...

    el-table,el-form在vue中封装组件化,含操作按钮和插槽.pdf

    在给定的文件中,展示了如何利用Element UI库来封装`el-table`和`el-form`组件,这两个组件在管理系统的界面中非常常见,特别是用于数据展示和表单提交。 首先,我们关注`el-form`组件的封装。`el-form`用于创建...

    元件封装尺寸大全---

    TapingSOP封装是指通过带状包装的SOP封装组件,这种封装方式便于自动化装配线上的拾取和放置操作,提高了生产效率。 #### TO-92封装: **TO-92、TO-92L、TO-92M、TO-92NL、TO-92SP:** TO-92封装是一种常用的晶体...

    QFN-24_4*4封装

    QFN-24_4*4封装

    EXT中文教程--经典学习资料

    EXT的基础是Element,Element是EXT对DOM元素的封装,提供了丰富的操作方法,如选择、修改属性、添加事件监听等。在EXT中,你可以通过ID、CSS选择器等方式获取一个或多个DOM节点,实现对页面元素的控制。 响应事件:...

    slide-ruler二次封装后的组件

    总的来说,"slide-ruler二次封装后的组件"是一个针对原生slide-ruler组件进行定制化开发的产品,它能够更好地适应特定项目的需求,提供更加个性化的用户体验。通过深入理解和利用"csRuler"文件,开发者可以轻松地将...

    xh2.54-4p 贴片AD封装.PcbLib

    AD封装带3D 自已第一次做带3D的封装。 xh2.54-4p 贴片AD封装,方便下载,可做多种3D封装。

    h264封装flv-----flv-muxer

    它在压缩效率上显著优于其前代,如MPEG-4 Part 2和H.263,能以更低的比特率提供高质量的视频。H.264编码的视频通常以裸流(即未封装的二进制数据)的形式存在,需要被封装到一个容器格式中以便传输和播放。 FLV是...

    sop4 封装尺寸图

    总的来说,SOP4封装是电子产品设计中常见的封装形式,其尺寸和应用需要根据具体的产品规格和使用环境进行仔细选择和设计。在使用过程中,遵守供应商的指导和注意事项,确保产品的可靠性和合规性。

    Type-C、Micro USB接口封装及3D模型

    在电子设备领域,接口是设备之间传输数据的关键部分。...因此,熟悉这两种接口的封装和3D模型对于硬件工程师来说是非常必要的。通过掌握这些知识,你可以更好地理解和设计符合现代需求的电子产品。

    ESXI7.0.2 已封装Intel I219-V 1225 网卡驱动.iso

    ESXI7.0.2,已封装Intel I219-V 1225 网卡驱动

Global site tag (gtag.js) - Google Analytics