Ext.form.FieldSet的用法
ExtJs入门实例

ExtJs2.0学习系列(1)--Ext.MessageBox发布时间:2008-8-7大家都知道,刚开始搞extjs的时候,很是有点困难,所以本人在新手刚入门后准备了这个系列的文章。
个人认为用extjs做后台很不错,布局比较完美!1.Ext.MessageBox.alert()方法有四个参数,为简单起见,主要介绍前面三个参数:alert( title , msg , function(){} )其中title,msg为必选参数,function为可选参数,在关闭弹出窗口后触发。
Ext.MessageBox.alert("title","msg");Ext.MessageBox.alert("title","msg",function(){alert("关闭对话框后弹出!")});2.Ext.MessageBox.confirm()方法基本上同alert()方法一模一样。
注意这点:Ext.MessageBox.confirm("title","msg",function(e){alert(e);});这个参数e是什么?它是你点击的弹出框的按钮的值,三种值:yes,no,cancel.Alert()方法也是如此,不过只有两种值:ok,cancel.3.Ext.MessageBox.prompt()方法有六个参数,比前面alert方法多一个返回值和是否多行。
Ext.MessageBox.prompt("title","msg");Ext.MessageBox.prompt("title","msg",function(e,text){alert(e+"-"+text);});//输入"qianxudetianxia",点击ok按钮,弹出ok-qianxudetianxiaExt.MessageBox.prompt("title","msg",function(e,text){alert(e+"-"+text);},this,true);//true为多行,this表示作用域4.Ext.MessageBox.show()方法功能很强大,采用config配置形式,比前面的方法使用更方便。
课题_ExtJs_FormPanel

表单时是web中常见的元素,Ext中的表单也是特别丰富的,接下来我们一块看看表单的相关内容。
还是先看一下代码和效果:Ext.onReady(function(){var fp=new Ext.form.FormPanel({ //注意:Ext.form.FormPanel=Ext.FormPaneltitle:'用户登录',width:300,//height:250,bodyStyle:'padding:5px 5px 0',renderTo:'divFormPanel',frame:true,//在此,这个属性就很重要了,如果不为true,你会看到下面的button和panel看起来是分开的url:'login.aspx',//提交地址method:'post',//提交方法defaults:{ //在这里同一定义item中属性,否则需要各个指明xtype:'textfield',labelAlign:'left',labelWidth:80,width:100},items:[{fieldLabel:'用户名',xtype:'textfield',//Ext基本类型,也可以用其对应的form元素代替name:'userName',id:'userName'//width:100},{fieldLabel:'密码',//xtype:'textfield',//Ext基本类型,也可以用其对应的form元素代替inputType:'password',name:'userPwd',id:'userPwd'//width:100}],buttonAlign:'center',//按钮对其方式buttons:[{text:'确定'},{text:'取消',handler:function(){//点击取消按钮的操作事件fp.hide();}}]});});FormPanel也比较好用,但是我认为我们有必要就上面xtype和inputType说几点。
ExtJS培训进阶教程

ExtJS培训进阶教程软件确实是服务名目1什么是ExtJs (3)2ExtJs的使用 (3)2.1猎取ExtJs (3)2.2应用Extjs (3)2.3演示HelloWorld (4)3get,getDOM,getCmp (4)3.1getDom方法 (4)3.2get方法 (5)3.3getCmp方法 (5)4事件 (8)5ExtJs所包含组件 (9)5.1ExtJS组件分类 (9)6ExtJs常用组件介绍 (11)6.1Panel组件 (11)6.1.1panel例如 (11)6.1.2panel的布局 (12)6.1.3panel属性简介 (14)6.2ViewPort组件 (15)6.3表格控件及其内部属性 (17)6.3.1简单的Grid (17)6.3.2Grid的功能详解 (19)6.4按钮 (27)7Ext.Ajax.request (28)8Ext同步/异步要求 (29)1什么是ExtJsExtJs是能够用来开发带有华丽外观的富客户端应用,使得我们的b/s应用更加具有活力及生命力,提高用户体验。
ExtJs是一个用javascript编写,与后台技术无关的前端ajax框架。
因此,能够把ExtJs用在.Net、Java、Php等各种开发语言开发的应用中。
2ExtJs的使用2.1猎取ExtJs猎取ExtJs://extjs .cn/download公司使用ExtJs版本为2.02.2应用Extjs应用extjs需要在页面中引入extjs的样式及extjs库文件,样式文件为resources/css/ext-all.css,extjs的js库文件要紧包含两个,adapter/ext/ext-base.js 及ext-all.js(ext/build/locale/ext-lang-zh_CN.js),其中ext-base.js表示框架基础库,ext-all.js是extjs的核心库。
HTMLfieldset标签使用方法

HTMLfieldset标签使⽤⽅法
这个标签很少⽤到,不过实际运⽤中可以得到意想不到的效果,如:
定义和⽤法
fieldset 元素可将表单内的相关元素分组。
<fieldset> 标签将表单内容的⼀部分打包,⽣成⼀组相关表单的字段。
当⼀组表单元素放到 <fieldset> 标签内时,浏览器会以特殊⽅式来显⽰它们,它们可能有特殊的边界、3D 效果,或者甚⾄可创建⼀个⼦表单来处理这些元素。
<fieldset> 标签没有必需的或唯⼀的属性。
<legend> 标签为 fieldset 元素定义标题。
实例:
<!DOCTYPE HTML>
<html>
<body>
<form>
<fieldset>
<legend>健康信息</legend>
⾝⾼:<input type="text" />
体重:<input type="text" />
</fieldset>
</form>
<p>如果表单周围没有边框,说明您的浏览器太⽼了。
</p>
</body>
</html>
实例效果:。
ExtJs学习资料17Ext.form.FormPanel表单对象操作说明

1、引入ExtJs框架文件(存入Global.js文件中)document.write("<link rel=\"stylesheet\" type=\"text/css\" href=\"../extjs/resources/css/ext-all.css\"/> "); document.write("<script type=\"text/javascript\" src=\"../extjs/adapter/ext/ext-base.js\"></script>");document.write("<script type=\"text/javascript\" src=\"../extjs/ext-all.js\"></script>");document.write("<script type=\"text/javascript\" src=\"../extjs/ext-lang-zh_CN.js\"></script>");2、引入Global.js文件<script type="text/javascript" src="Global.js"></script><style type="text/css">.icon{background:url(icon.gif) 0 4px no-repeat !important}</style>3、效果图===================================================================================================================== 4、JS源代码<script type="text/javascript">Ext.onReady(function(){//--开始-->; //初始化提示信息实例Value Description----------- --------------------------------------------qtip当鼠标从输入栏移过时显示一个quick tiptitle 显示一个默认的浏览器弹出标题属性under在输入栏下显示一个块状div,包含出错文本side 在输入栏右侧显示一个突出的出错图标[element id] 直接在指定元素的innerHTML中加入出错文本----------------------------------------------------------"side";//======================正则表达式自定义========================"jack Val"]=/^[\u4E00-\u9FA5]+$/; //允许输入//"jack Mask"]=/^[A-Za-z]+$/; //输入指定的字符,除此之外不响应"jack Text"]="只能输汉字"; //提示信息"jack"]=function(v){ //检测函数return "jackVal"].test(v);}//======================附加正则表达式自定义========================Ext.applyIf(,{"telphone":function(_v){return/(^\d{3}\-\d{7,8}$)|(^\d{4}\-\d{7,8}$)|(^\d{3}\d{7,8}$)|(^\d{4}\d{7,8}$)|(^\d{7,8}$)/.test(_v);},"telphone Text":"请输入合法的电话号码","telphone Mask":/[0-9\-]/i,"mobile":function(_v){return/^1[1-9][0-9]\d{8}$/.test(_v);},"mobile Text":"请输入合法手机号码","mobile Mask":/[0-9]/i});//=====================定义简单数据源===============================var myStore=newfields:["txtValue","txtName"],data:[["1","喜剧"],["2","悲剧"],["3","动作"]]});//==============定义动态数据源(从服务器端获取数据)====================var dynamicStore=new/*服务器端返回信息格式:<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%><meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <%response.Clear()response.Write("{rows:[{txtValue:""1"",txtName:""喜剧"",sortOrder:0},")response.Write("{txtValue:""2"",txtName:""悲剧"",sortOrder:1},")response.Write("{txtValue:""3"",txtName:""动作"",sortOrder:2},")response.Write("{txtValue:""4"",txtName:""爱情"",sortOrder:3}]}") %>*///DataReader对象,它处理数据对象并返回,reader:newfields:["txtValue","txtName"],root:"rows"}),//如果传入此值,store将在被创建后使用autoLoad对象作为参数自动调用load方法autoLoad:true,//Proxy对象,提供访问数据对象的方法proxy:new url:"getJsonData.asp" })});//dynamicStore.load(); //使用配置的Reader从Proxy中加载Record缓存//================================================================var movie_form;if(!movie_form){movie_form=newid:"myForm", //组件唯一的id(默认值为一个自动生成的id)title:"电影信息表单", //panel头部显示的标题文字(默认值为 '')//autoWidth:true, //宽度充满整个文档的宽度width:460,//表单的宽度autoHeight:true,//表单自适应高度//height:400,//表单的高度// frame:如果为true,panel具有全部阴影(指在panel的整个body区域全部填充背景),//否则只在四周渲染一个1像素的边框(默认值为false)frame:true,iconCls:"icon", //提供一个被用作header图标的背景图片(默认值为 '')// monitorValid:如果为true,form监控自己的客户端校验状态,并使用校验状态循环触发事件.//如果需要在按钮上使用配置值formBind:true,将按钮绑定到表单的校验状态,那么该项必须为truemonitorValid:true,labelWidth:80,labelAlign:"right",//collapsible:如果为true,panel是可收缩的,并且有一个收起/展开按钮自动被渲染到它的头部工具区域,//否则panel的大小是固定的,没有按钮(默认值为 false)。
[转]ExtJs入门之filefield:文件上传的配置+结合Ajax完美实现文件上传的a。。。
![[转]ExtJs入门之filefield:文件上传的配置+结合Ajax完美实现文件上传的a。。。](https://img.taocdn.com/s3/m/2521bf00cd7931b765ce0508763231126edb7738.png)
[转]ExtJs⼊门之filefield:⽂件上传的配置+结合Ajax完美实现⽂件上传的a。
作⽂⼀个ExtJs的⼊门汉⼦,学习起来的确是⽐较费劲的事情,不过如今在这样⼀个⽹络资源如此丰富的时代,依然不是那么难了的。
基本上都是Copy过来加以部分改造即可实现⾃⼰想要的功能,加之如今的第三⽅开发者也⼤发慈悲地写出了API的帮助⽂档以及⽰例⽂档。
关于ExtJs内的⽂件上传,将从以下⼏个⽅⾯进⾏展开讲解:⼀、ExtJs⽂件上传版⾯的布局以及配置因为ExtJs的⽂件上传组件filefield是基于form表单提交数据的,所以我们需要创建Ext.form.Panel,页⾯布局及其配置代码如下所⽰:001.<html xmlns="">002.<head runat="server">003.<title>ExtJs的⽂件上传</title>004.<!-- ExtJS -->005.<link rel="stylesheet"type="text/css"href="/css/ext-all.css"/>006.<script type="text/javascript"src="/js/ext-all.js"></script>007.<!-- Shared -->008.<link rel="stylesheet"type="text/css"href="/css/example.css"/>009.<script type="text/javascript"language="javascript">010.Ext.require([011.'Ext.form.field.File',012.'Ext.form.Panel',013.'Ext.window.MessageBox'014.]);015.016.Ext.onReady(function() {017.//定义⼀个消息提⽰⽅法018.var msg = function(title, msg) {019.Ext.Msg.show({020.title: title,021.msg: msg,022.minWidth: 200,023.modal: true,024.icon: ,025.buttons: Ext.Msg.OK026.});027.};028.//创建form表单029.Ext.create('Ext.form.Panel', {030.renderTo: 'divUpload',//form表单的承载对象031.width: 600, //表单宽度032.frame: true,033.title: '图⽚上传',//表单名称034.bodyPadding: '10 10 0', //表单内项⽬距离边框的值035.//配置默认属性036.defaults: {037.anchor: '90%',038.allowBlank: false,039.msgTarget: 'side',belWidth: 100041.},042.//表单内的项⽬配置043.items: [{044.xtype: 'textfield',045.fieldLabel: '图⽚说明',: 'picDesc'//这个是⽂本框的name值,post表单数据的时候,⽤于Request["picDesc"] 获取数据之⽤047.}, {048.xtype: 'filefield',049.id: 'fileUpload',050.emptyText: '请选择⼀个图⽚⽂件',051.fieldLabel: '图⽚路径',: 'fileUpload',053.buttonText: '浏览',054.buttonConfig: {055.iconCls: 'upload-icon'056.},057.//添加事件058.listeners: {059.//装载的时候添加监听事件060."render": function() {061.//这⾥尤其要注意的是使⽤Ext.get('upload'),⽽不是Ext.getCmp('upload'),否则不起效果,若使⽤后者,则只有当⽂本框的内容改变的时候,才会触发change 事件062.Ext.get('fileUpload').on("change", function() {063.debugger064.var uploadFileName = Ext.getCmp('fileUpload').getValue();065.//只允许上传jpg|JPG⽂件066.if(uploadFileName.substring(stIndexOf(".") + 1).toLowerCase() != "jpg"|| uploadFileName.substring(stIndexOf(".") + 1).toLowerCase() != "JPG") {067.msg('Error', '只允许上传pg|JPG⽂件!');068.}069.})070.}071.}072.}],073.buttons: [{074.text: '上传',075.handler: function() {076.var form = this.up('form').getForm();077.//验证表单078.if(form.isValid()) {079.//获取所选择⽂件的名称080.var epath = form.findField("fileUpload").getValue();081.//只允许上传jpg|JPG件082.if(epath.substring(stIndexOf(".") + 1).toLowerCase() == "jpg"|| epath.substring(stIndexOf(".") + 1).toLowerCase() == "JPG") {083.form.submit({084.url: '/Pic/Upload_Ajax.aspx',085.waitMsg: '图⽚正在上传,请耐⼼等待....',086.success: function(fp, o) {087.msg('图⽚上传成功', o.message);088.},089.failure: function(fp, o) {090.msg("错误提⽰", o.message);091.}092.});093.} else{094.msg('错误提⽰', '只允许上传jpg|JPG⽂件!');095.}096.}097.}098.}, {099.text: '取消',100.handler: function() {101.this.up('form').getForm().reset();102.}103.}]104.});105.106.});107.</script>108.</head>109.<body>110.<form id="form1"runat="server">111.<div id="divUpload">112.</div>113.</form>114.</body>115.</html>⼆、编写Upload_Ajax.aspx的相关代码获取表单数据核⼼代码如下所⽰:01.protected void Page_Load(object sender, EventArgs e)02.{03.HttpPostedFile file = Request.Files["fileUpload"];04.//图⽚描述05.string FileDesc = Request["picDesc"];06.07.if(file != null)08.{09.//上传图⽚路径10.string PicSavePath = string.Format("/images/upload/{0}", file.FileName);11.try12.{13.file.SaveAs(MapPath(PicSavePath));14.}15.catch(Exception eg)16.{17.Response.Write("{success:false,flag:0,message:'"+eg.ToString()+"!'}");18.}19.Response.Write("{success:true,flag:0,message:'⽂件"+file.FileName+"上传成功!'}");20.}21.else22.{23.Response.Write("{success:false,flag:0,message:'参数配置错误!'}");24.}25.Response.End();26.}三、运⾏效果图⽂件上传页⾯配置效果图图1:⽂件上传页⾯配置效果图⽂件上传过程中的提⽰效果图图2:⽂件上传过程中的提⽰效果图。
Ext 实用开发指南
序言ExtJS是一个很不错的Ajax框架,可以用来开发带有华丽外观的富客户端应用,使得我们的b/s应用更加具有活力及生命力。
ExtJS是一个用javascript编写,与后台技术无关的前端ajax框架。
因此,可以把ExtJS用在.Net、Java、Php等各种开发语言开发的应用中。
最近我们在几个应用都使用到了ExtJS,对公司以前开发的一个OA系统也正在使用ExtJS2.0进行改造,使得整个系统在用户体验上有了非常大的变化。
本教程记录了前段时间本人学习ExtJS的一些心得及小结,希望能帮助正在学习或准备学习ExtJS的朋友们快速走进ExtJS2.0的精彩世界。
教程包括ExtJS的新手入门、组件体系结构及使用、ExtJS中各控件的使用方法及示例应用等,是一个非常适合新手的ExtJS入门教程。
本教程主要是针对ExtJS2.0进行介绍,全部代码、截图等都是基于ExtJS2.0。
在学习了本教程后,可以下载这个基于ExtJS2.0开发的单用户Blog系统的源代码,这个系统是我们团队中的williamraym与大峡等人开发的一个演示系统,系统源码整体质量比较高,通过学习这套源代码相邻一定能提高您ExtJS的综合水平。
本教程比较适合ExtJS的新手作为入门教程及手册使用,并在我的博客/blog/lengyu/上进行发布;应一些朋友的要求,根据本教程的写作思路,我还编写了比本教程更为详细的《ExtJS实用开发指南》,包含详细的ExtJS框架使用方法、各个控件详细配置参数、属性、方法及事件介绍,与服务器端集成及一个完整的示例应用系统介绍等内容,适合想深入学习ExtJS或正在使用ExtJS进行开发朋友们使用。
该《指南》当前在作为VIP文档发布,供该站的VIP用户阅读及下载。
凡是购买了《ExtJS 实用开发指南》文档的VIP用户,都可以在该指南印刷版出版后均会免费得到相应的印刷版本。
最后,希望广大网友把阅读本教程中的发现的错误、不足及建议等反馈给我们,让我们一起共同学习、共同进步,下面让我们一起进入精彩的ExtJS世界吧。
Extjs5开发学习-24-模块Form的自定义的设计[2]
Extjs5开发学习-24-模块Form的自定义的设计[2]在本节中将要加入各种类型的字段,在加入字段的时候由于可以一行加入多个字段,因此层次结构又多了一层fieldcontainer。
form里面的主要层次结构如下: form -- fieldSet -- fieldcontainer -- field。
现在加入fieldcontainer的生成器的文件,在factory中加入文件FieldContainerFactory.js[javascript]view plain copy1./**2. * 字段容器factory3. */4.Ext.define('app.view.module.factory.FieldContainerFactory', {5.6. statics : {7.8. getContainer : function(container, module, formtype) {9.10.var result = {11. xtype : 'fieldcontainer',12. layout : 'hbox',13. margin : '0 0 0 0',14. items : []15. };16.for (var i in container) {17.var field = container[i];18.// 如果是空的位置19.if (field.spacer) {20. result.items.push({21. xtype : 'fieldcontainer',22. layout : 'anchor',23. margin : '0 0 0 0',24. flex : field.flex25. });26. } else {27.var fieldDefine = module.getFieldDefine(field.tf_fieldId);28.29.var f = app.view.module.factory.FormFieldFactory.getField(fieldDefine,30. field, formtype, module);31.32.var c = {33. xtype : 'fieldcontainer',34. layout : ( f.moduleName )35. ? (field.tf_width != -1 ? 'table' : 'hbox')36. : 'anchor',37. flex : field.tf_colspan,38. items : []39. };40.if (yout == 'hbox')41. c.margin = '0 0 5 0';42. c.items.push(f);43.44. result.items.push(c);45. }46. }47.return result;48. }49. }50.});现在要加入最后一个field的生成器,FormFieldFactory.js,此文件敢放在factory 目录之下。
ExtJs入门
ExtJs2.0学习系列(1)--Ext.MessageBox大家都知道,刚开始搞extjs的时候,很是有点困难,所以本人在新手刚入门后准备了这个系列的文章.个人认为用extjs做后台很不错,布局比较完美!1.Ext.MessageBox.alert()有四个参数,为简单起见,主要介绍前面三个参数:alert( title , msg , function(){} );其中title,msg为必选参数,function为可选参数,在关闭弹出窗口后触发.【注意】Ext.MessageBox.alert("title","msg",function(e){alert("按钮的值:"+e);});参数e: 两种值 (ok,cancel).2.Ext.MessageBox.confirm()基本上同 alert() 方法一模一样.【注意】Ext.MessageBox.confirm("title","msg",function(e){alert("按钮的值:"+e);});参数e:三种值(yes,no,cancel).3.Ext.MessageBox.prompt()有六个参数,比前面alert方法多一个返回值和是否多行.Ext.MessageBox.prompt("title","msg");【注意】e是按钮返回值,text是文本框中的输入内容,true为多行,this表示作用域4.Ext.MessageBox.show()功能很强大,采用config配置形式,比前面的方法使用更方便.参数很多,在此列举最常用的配置参数:a)animEl:对话框弹出和关闭时的动画效果,比如设置为”id1”,则从id1处弹出并产生动画,收缩则相反;b)buttons:弹出框按钮的设置,【Ext.Msg.OK】【Ext.Msg.OKCANCEL】【Ext.Msg.CAMCEL】【Ext.Msg.YESNO】【Ext.Msg.YESNOCANCEL】可以自定义按钮上面的字:{"ok","我本来是ok的"},若设为false,则不显示任何按钮,默认为false.c)closable:如果为false,则不显示右上角的小叉叉,默认为true;d)msg:消息的内容;e)title:标题;f)fn:关闭弹出框后执行的函数;g)icon:弹出框内容前面的图标,【】【Ext.MessageBox.ERROR】【Ext.MessageBox.WARNING】【Ext.MessageBox.QUESTION】h)width:弹出框的宽度,不带单位;i)prompt:设为true,则弹出框带有输入框,默认为false;j)multiline:设为true,则弹出框带有多行输入框k)progress:设为true,显示进度条,(但是是死的)l)progressText:显示在进度条上的字m)wait:设为true,动态显示progress5.Ext.MessageBox.show()中的进度条的使用首先必须知道另外两个方法 Ext.MessageBox.hide()和Ext.MessageBox.updateProgress(value,"ProgressText","msg")(三个参数,看名字就知道意思), 【注意】value为0-1之间的数,表示进度条的进度.第一种:(通过进度的大小控制进度,满进度为1)Ext.get("btn1").on("click",function(){Ext.MessageBox.show({title:"df",msg:"dfd",progress:true,width:300,closable:true});var f=function(v){return function(){if(v==12) {Ext.MessageBox.hide();}Else{var i=v/11;Ext.MessageBox.updateProgress(i,Math.round(100*i)+"% completed",i);}}}for(var i=1;i<13;i++){setTimeout(f(i),i*500);//从点击时就开始计时,所以500*i表示每500ms就执行一次}});第二种:(通过固定时间控制进度加载)最后关于那个waitConfig的参数,在此说明下:a)interval:进度的频率b)duration:执行进度的持续时间,超过这个时间后,interval失效,不再产生进度效果,但进度狂也不会消失.c)fn:duration的时间到后执行的函数所以,上面的通过时间控制进度另外一种写法为:Ext.get("btn1").on("click",function(){Ext.MessageBox.show({title:"时间进度条",msg:"5s后关闭进度框",progress:true,width:300,wait:true,waitConfig:{interval:600,duration:5000,fn:function(){Ext.MessageBox.hide();//让进度条消失}},closable:true});//setTimeout(function(){Ext.MessageBox.hide()},5000);});ExtJs2.0学习系列(2)--Ext.Panel今天介绍 extjs 中的 Panel 组件.因为panel组件的子类组件包括TabPanel,GridPanel,FormPanel,TreePanel 组件,所以非常有必要介绍Panel组件的配置参数和相关的属性、方法.//配置参数(只列举部分常用参数)a)autoLoad:有效的url字符串,把那个url中的body中的数据加载显示,但是可能没有样式和js控制,只是html数据b)autoScroll:设为true 则内容溢出的时候产生滚动条,默认为falsec)autoShow:设为true显示设为"x-hidden"的元素,很有必要,默认为falsed)bbar:底部条,显示在主体内, //代码:bbar:[{text:'底部工具栏bottomToolbar'}]e)tbar:顶部条,显示在主体内, //代码:tbar:[{text:'顶部工具栏topToolbar'}]f)buttons:按钮集合,自动添加到footer中(footer参数,显示在主体外)// 代码 :buttons:[{text:"按钮位于footer"}]g)buttonAlign:footer中按钮的位置,枚举值为:"left","right","center",默认为righth)collapsible:设为true,显示右上角的收缩按钮,默认为falsei)draggable:true则可拖动,但需要你提供操作过程,默认为falsej)html:主体的内容k)id:id值,通过id可以找到这个组件,建议一般加上这个id值l)width:宽度m)height:高度n)title:标题o)titleCollapse:设为true,则点击标题栏的任何地方都能收缩,默认为false.p)applyTo:(id)呈现在哪个html元素里面q)contentEl:(id)呈现哪个html元素里面,把el内的内容呈现r)renderTo:(id)呈现在哪个html元素里面// 关于这三个参数的区别(个人认为:applyTo和RenderTo强调to到html元素中,contentEl则是html元素到ext组件中去);关于contentEl有资料如下:ContentEl - This config option is used to take existing content and place it in the bo dy of a new panel. It is not going to be the actual panel itself. (It will actually copy the innerHTML of the el and use it for the body). You should add either the x-hidden or t he x-hide-display CSS class to prevent a brief flicker of the content before it is render ed to the panel.ApplyTo - This config option allows you to use pre-defined markup to create an entire Panel. By entire, I mean you can include the header, tbar, body, footer, etc. These elements must be in the correct order/hierarchy. Any components which are not found and need t o be created will be autogenerated.RenderTo - This config option allows you to render a Panel as its created. This would be the same as saying myPanel.render(ELEMENT_TO_RENDER_TO);考虑到入门,方法事件会在以后的文章中以实例穿插.1.可拖动的panel实例下面我们做个可拖动panel例子来熟悉下panel这个最基本的组件.但是还不能拖到其他的地方,我们需要改写draggable:实现了可保存的拖动,如图:拖动的时候阴影还在原位置,我们再在draggable中的onDrag事件中添加代码:最后这个可拖动的panel的代码为:var p=new Ext.Panel({title: 'Drag me',x: 100,y: 100,renderTo: Ext.getBody(),floating: true,frame: true,width: 400,height: 200,draggable: {insertProxy: false,onDrag : function(e){var pel = this.proxy.getEl();this.x = pel.getLeft(true);this.y = pel.getTop(true);var s = this.panel.getEl().shadow;if (s) {s.realign(this.x, this.y, pel.getWidth(), pel.getHeight());}},endDrag : function(e){this.panel.setPosition(this.x, this.y);}}})2.带顶部,底部,脚部工具栏的panel我们已经在各种工具栏上添加了按钮,但是却没有激发事件,下面我们来添加按钮事件代码:改写tbar,添加handler句柄,点击顶部工具栏上按钮1,弹出提示框,效果图大家想象下,就不贴出来了当然,一般情况下,我们只要一个工具栏,这里只是为了演示!3.panel工具栏添加下面的代码到panel配置参数中:id的枚举值为:toggle (collapsable为true时的默认值)close minimize maximize restore gear pinunpin right left up down refreshminus plus help search save printExtJs2.0学习系列(3)--Ext.Window介绍window组件,它继承自panel.先介绍个最简单例子参数介绍:因为前面已经介绍了panel组件,下面只介绍window组件的几个其他特别的配置参数//几个前面没有介绍的window自己的配置参数a)closeAction:枚举值为:close(默认值),当点击关闭后,关闭window窗口,关闭后,只是hidden窗口b)closable:true在右上角显示小叉叉的关闭按钮,默认为truec)constrain:true则强制此window控制在viewport,默认为falsed)modal:true为模式窗口,后面的内容都不能操作,默认为falsee)plain://true则主体背景透明,false则主体有小差别的背景色,默认为falsew.show()//需要显示下show()方法,默认的窗口是可拖动的,可关闭的,可拖动大小的实例介绍:1.嵌套了tabpanel的window我们通过items把TabPanel组件嵌套在window的主体中去了.我们再添加工具栏看看其他工具栏方法一样.关于window中嵌套复杂的布局,等我们谈完了extjs布局再举例说明.ExtJs2.0学习系列(4)--Ext.FormPanel之第一式上篇中我们讨论了Ext.window的简单使用,今天我们要看看强大的FormPanel,也是继承panel组件的使用. 首先弄清楚这个问题,创建的时候:Ext.form.FormPanel = Ext.FormPanel;//查看源代码便知,两种方法是一样的我们还是从最简单的代码实例开始吧:<!--html代码--><div id="form1"></div>//js代码var form1 = new Ext.form.FormPanel({width:350,frame:true,//圆角和浅蓝色背景renderTo:"form1",//呈现在哪个控件里title:"FormPanel",bodyStyle:"padding:5px 5px 0",items:[{fieldLabel:"UserName",//文本框标题xtype:"textfield", //表单文本框name:"user",id:"user",width:200},{fieldLabel:"PassWord",xtype:"textfield",name:"pass",id:"pass",width:200}],buttons:[{text:"确定"},{text:"取消",handler:function(){alert("事件!");}}] });都是通过items属性参数把表单元素添加到这个表单中.我们发现两个文本框的类型和宽度是一样的,我们还可以把items里面的相同项提取出来,以简化代码:关于inputType参数(同input类型相同,只列举几个典型的)如下:radio check text(默认) file password等等关于FormPanel的配置参数,请主要参考panel的参数,这里列举另外两个:a)labelAlign:fieldlabel的排列位置,默认为"left",其他两个枚举值是"center","right"b)labelWidth:fieldlabel的占位宽c)method:"get"或"post"d)url:"提交的地址"e)submit:提交函数因为内容太多,我们先看一个例子.1.FormPanel的fieldset应用//把前面代码重写items属性items:[{xtype:'fieldset',title: '个人信息',collapsible: true,autoHeight:true,width:330,defaults: {width: 150},defaultType: 'textfield',items :[{fieldLabel: '爱好',name: 'hobby',value: ''},{xtype:"combo",name: 'sex',store:["男","女","保密"],//数据源为一数组fieldLabel:"性别",emptyText:'请选择性别.'}]}]这里的combox组件只是简单的演示,具体还是要深入了解,我们会在以后的内容中详细探讨.2.关于xtype的类型,在extjs的form表单(其他的请参考api)中已经定义的有:Form componentsa)form Ext.FormPanelb)checkbox Ext.form.Checkboxc)combo boBoxd)datefield Ext.form.DateFielde)field Ext.form.Fieldf)fieldset Ext.form.FieldSetg)hidden Ext.form.Hiddenh)htmleditor Ext.form.HtmlEditori)label belj)numberfield Ext.form.NumberFieldk)radio Ext.form.Radiol)textarea Ext.form.TextAream)textfield Ext.form.TextFieldn)timefield Ext.form.TimeFieldo)trigger Ext.form.TriggerField不早了,FormPanel还有很多的东西要了解,但是今天不能再讲了,太多了,大家都没有兴致看下去,明天继续.extjs的东西很庞大,但是还没有一个人用中文系统的分析写文章,所以资料都很可贵,现在我想做这件事,请大家多多支持,我才有动力.ExtJs2.0学习系列(5)--Ext.FormPanel之第二式3.可选的fieldset实例其实就是带个chechbox,有点像论坛注册时有一部分是选填信息的那种效果,主要知识点:●checkboxToggle:true//true则呈现一个带checkbox的fieldset,选中则展开,否则相反,默认为false●checkboxName:string//当上面为true时,作为checkbox的name,方便表单操作//在上一节的基础代码的items里面添加如下配置{xtype:"fieldset",checkboxToggle:true,//关键参数,其他和以前的一样checkboxName:"dfdf",title:"选填信息",defaultType:'textfield',width:330,autoHeight:true,//使自适应展开排版items:[{fieldLabel:"UserName",name:"user",anchor:"95%"//330px-labelWidth剩下的宽度的95%,留下5%作为后面提到的验证错误提示},{fieldLabel:"PassWord",inputType:"password",//密码文本name:"pass",anchor:"95%"}]}4.表单验证实例(空验证,密码确认验证,email验证)我们可以用单独的js写表单验证,但是extjs已经为我们想到了(自己单独写反而不方便).在验证之前,我不得不提两个小知识点(大家在很多的extjs代码中都看到了这两个,他们都起提示作用的): ●Ext.QuickTips.init(); //支持tips提示●Ext.form.Field.prototype.msgTarget='side';//提示的方式,枚举值为"qtip","title","under","side",id(元素id)//side方式用的较多,右边出现红色感叹号,鼠标上去出现错误提示,其他的我就不介绍了,可自行验证大家可以分别去掉这两行代码,看效果就会明白他们的作用,(放在onReady的function(){}中)✧我们看一个最简单的例子:空验证(其实这不算是一个专门的验证例子)//空验证的两个参数a)allowBlank:false//false则不能为空,默认为trueb)blankText:string//当为空时的错误提示信息js代码为:✧用vtype格式进行简单的验证.在此举邮件验证的例子,重写上面代码的items配置:你可以修改上面的vtype为以下的几种extjs的vtype默认支持的验证:●alpha //只能输入字母,无法输入其他(如数字,特殊符号等)●alphanum//只能输入字母和数字,无法输入其他●email//email验证,要求的格式是langsin@●url//url格式验证,要求的格式是✧确认密码验证(高级自定义验证)前面的验证都是extjs已经提供的验证,我们也可以自定义验证函数,比上面要复杂点了.我们一起做一个密码确认的例子.我们修改前面的代码://先用Ext.apply方法添加自定义的password验证函数(也可以取其他的名字)Ext.apply(Ext.form.VTypes,{password:function(val,field){//val指这里的文本框值,field指这个文本框组件,大家要明白这个意思if(field.confirmTo){//confirmTo是我们自定义的配置参数,一般用来保存另外的组件的id值var pwd=Ext.get(field.confirmTo);//取得confirmTo的那个id的值return (val==pwd.getValue());}return true;}});//配置items参数items:[{fieldLabel:"密码",id:"pass1",anchor:"90%"},{fieldLabel:"确认密码",id:"pass2",vtype:"password",//自定义的验证类型vtypeText:"两次密码不一致!",confirmTo:"pass1",//要比较的另外一个的组件的idanchor:"90%"}]关于vtype的内容还有很多内容要挖掘,但现在我们就点到这里为止,以后有机会再讨论它的其他高级验证.ExtJs2.0学习系列(6)-- Ext.FormPanel之第三式(ComboBox篇)上篇ExtJs2.0学习系列(5)--Ext.FormPanel之第二式中我们讨论了下fieldset和表单验证的知识,今天我们接着深入解析表单元素中ComboBox组件的使用.会涉及到.net简单服务器数据交互,但暂不做深入讨论,以后会详细分析服务器交互相关,不过可能要等较长一段时间,呵呵!5.服务器数据作为ComboBox的数据源实例首先从服务器获取json数据:我们就通过<%=ServerData%>这样的方式获取到了服务器最简单的属性数据.问题来了,js和html怎么调用c#后台的变量和方法?(变量的调用上面刚刚介绍)6.js和html怎么调用c#后台的变量和方法a)js调用c#后台变量,参考上面,注意,如果想获取string类型,请在js里用引号 varstr="<%=ServerData%>"(返回"['湖北','江西','安徽']")b)js调用c#后台方法:c)js调用c#后台带参数的方法boBox的数据源store格式详解在前面的例子里面,我们一直给ComboBox的数据源store赋值一维数组,其实store支持多维和Store.data.Store类型.下面就几种数据以代码举例说明一维数组:["江西","湖北"],值同时赋给ComboBox的value和text二维和多维数组:[["one","bbar","111"],["two","tbar","222"]],第一维和第二维分别赋值给value和text,其他维忽略store类型:包括GroupingStore, JsonStore, SimpleStore.我们分三步走:这里我们介绍了两个新的参数displayField和mode,请记住,后面不再专门说明.boBox的value获取添加listeners事件:ComboBox的事件很多(api),我们无法一一讲解,但是我们可以举一反三,select事件就是其中典型的一个这里我们提供了一种不是很好的方法,在此不做过多停留9.把Extjs的ComboBox样式应用到select的下拉框中去核心参数介绍transform:id//用于转换样式的,TimeField作为ComboBox的子类也有此属性核心代码:boBox的其他重要参数a)valueField:"valuefield" //value值字段b)displayField:"field" //显示文本字段c)editable:false //false则不可编辑,默认为trued)triggerAction:"all"//请设置为"all",否则默认为"query"的情况下,你选择某个值后,再此下拉时,只出现匹配选项,如果设为"all"的话,每次下拉均显示全部选项e)hiddenName:string //真正提交时此combo的name,请一定要注意f)typeAhead:true, //延时查询,与下面的参数配合g)typeAheadDelay:3000, //默认250关于combobox的其他花俏功能在此不多做介绍.最后一点,如何实现在aspx页面更灵活的分离cs数据和js数据的交互?因为我们都喜欢把js放在一个单独的文件,然后在aspx页面引用这样就有一个问题,我在js里直接获取cs数据就有点不方便.我认为可以这样,在aspx页面里获取数据,并作为js,你就js变量,你就可以在js里引用了,或者直接通过url地址获取.之所以这么啰嗦的讲combobox,是因为这个东西有时候真的让人又爱又恨!下篇中我们继续讲解form中其他的表单元素!ExtJs2.0学习系列(7)--Ext.FormPanel之第四式(其他组件示例篇) 11.checkbox简单示例效果图:js代码:Ext.onReady(function(){Ext.QuickTips.init();var myform=new Ext.FormPanel({frame:true,width:330,layout:"form",labelWidth:30,title:"checkbox简单示例",labelAlign:"left",renderTo:Ext.getBody(),items:[{xtype:"panel",layout:"column",//也可以是table,实现多列布局fieldLabel:'爱好',isFormField:true,//非常重要,否则panel默认不显示fieldLabelitems:[{columnWidth:.5,//宽度为50%xtype:"checkbox",boxLabel:"足球",//显示在复选框右边的文字name:""},{columnWidth:.5,xtype:"checkbox",boxLabel:"篮球",name:""}]}]});});关于多列布局,我们可以使用column或者table布局解决!a)checked:true//true则选中,默认为falseb)name:"**"//name值c)value:""//初始化值,默认为undefine12.radio简单示例基本上和checkbox一样,不过注意一组单选框必须name值相同,才能单选.效果图:代码:Ext.QuickTips.init();var myform=new Ext.FormPanel({frame:true,width:330,layout:"form",labelWidth:30,title:"radio简单示例",labelAlign:"left",renderTo:Ext.getBody(),items:[{xtype:"panel",layout:"column",fieldLabel:'性别',isFormField:true,items:[{columnWidth:.5,xtype:"radio",boxLabel:"男",name:"sex"//inputValue},{columnWidth:.5,checked:true,xtype:"radio",boxLabel:"女",name:"sex"}]}]});});13.htmleditor简单示例效果图:frame:true,width:600,layout:"form",labelWidth:50,title:"htmleditor简单示例",labelAlign:"top",//items中的标签的位置renderTo:Ext.getBody(),items:[{xtype:"htmleditor",id:"he",fieldLabel:"编辑器",anchor:"99%"}]});});在这里我啰嗦个参数:labelAlign:此参数是指form表单中items各项的label位置,默认值为left,枚举值有left,right,top 我看见过有朋友认为此参数指title的位置,是错误的!几个其他的参数:a)hideLabel:true//默认为false,还适用于有标签的所有表单组件//下面的一组参数控制编辑器的工具栏选项,都是默认值为trueb)enableColors:true//默认为true,显示字体颜色,字体背景颜色c)enableAlignments:true//左,中,右对齐d)enableFont:true//字体e)enableFontSize:false//字体大小,就是A旁边有个小箭头的f)enableFormat:false//粗体,斜体,下划线g)enableLinks:true//链接h)enableLists:true//列表i)enableSourceEdit:true//源代码编辑14.datefield简单示例效果图:15.timefield简单示例把上面的例子中datefield改为timefield,效果图:16.numberfield简单示例:把上面的datefield改为numberfield,就只能输入数字了17.triggerfield简单示例说明:它提供了一个触发的事件onTriggerClick,datefield和combox都是继承它效果图:(点击右边下拉按钮)js代码:Ext.onReady(function(){Ext.QuickTips.init();var myform=new Ext.FormPanel({frame:true,width:200,layout:"form",labelWidth:30,title:"triggerfield简单示例",labelAlign:"left",renderTo:Ext.getBody(),items:[{xtype:"trigger",fieldLabel:"触发",anchor:"99%",onTriggerClick:function(e){//在这里写你要实现的事件,很容易扩展alert("");}}]});});好了,关于form的几个基本组件我们都蜻蜓点水的看了一遍,相信大家感性上知道是怎么回事啦!(总算快写完了formpanel)前面有朋友说要做个一行多个控件,中间有文字的那种form布局,谢谢支持!下篇我们就做一个复杂点的form组件,还能提交服务器的综合示例!敬请期待!ExtJs2.0学习系列(8)--Ext.FormPanel之第五式(综合篇)在上篇和前面的介绍中,我们基本上对form表单中常见组件有了简单的认识,今天我们做个综合点的例子,向服务器提交下!其实这篇文章很简单,没有什么发光点,暂放首页半天,忘各位理解!先来个简单的例子,以说明formpanel如何把数据传给其他页面.效果图:现在我们要实现的效果是:点击确定,把值传到另一页面!,如下:原页面js代码为:Ext.onReady(function(){Ext.QuickTips.init();var form=new Ext.FormPanel({frame:true,width:300,//monitorValid:true,//绑定验证layout:"form",labelWidth:70,title:"添加个人信息",labelAlign:"left",renderTo:Ext.getBody(),submit: function(){this.getEl().dom.action = 'GetForm.aspx',this.getEl().dom.method='POST',this.getEl().dom.submit();},items:[{xtype:"textfield",fieldLabel:"用户名",//id:"UserName",allowBlank:false,blankText:"不能为空,请正确填写",name:"UserName",anchor:"90%"},{接受页面GetForm.aspx的cs代码为:因为很简单,我做个简要说明://几点说明1.首先定义submit参数的执行函数,即:2.为按钮添加触发相应的提交(取消)事件(这样就不是默认的ajax提交):3.如果你想绑定验证,在form表单添加参数monitorValid:true,然后在按钮配置参数中添加formBind:true,如buttons:[{text:"确定",handler:login,formBind:true},{text:"取消",handler:reset}]则只有所有的填写字段都满足条件时,"确定"方可提交!如下图,好了,一个简单的formpanel的提交的原理弄清楚啦!有关form提交数据的方法有多种,大家可以参考/showtopic-55.aspx(三种ext提交数据的方式),下面我们来做个复杂点(只是样子)的form,示例一下(还是上面的原理)!效果图:传到GetForm.aspx页面后显示:不过在传过来的页面要记得ValidateRequest="false",安全编码我就暂且不讨论了!js代码:frame:true,width:500,monitorValid:true,//把有formBind:true的按钮和验证绑定layout:"form",labelWidth:55,title:"添加个人信息",labelAlign:"right",renderTo:Ext.getBody(),submit: function(){this.getEl().dom.action = 'GetForm.aspx',this.getEl().dom.method='POST',this.getEl().dom.submit();},items:[{xtype:"panel",layout:"column",fieldLabel:"用户名",isFormField:true,items:[{columnWidth:.5,xtype:"textfield",allowBlank:false,blankText:"不能为空,请填写",name:"UserName",anchor:"90%"},{columnWidth:.20,layout:"form",labelWidth:40,labelAlign:"right",items:[{xtype:"radio",fieldLabel:"性别",boxLabel:"男",name:"Sex",checked:true,inputValue:"man",//这里如果用value,值是on,所以用inputValue(出现这种情况的是radio,checkbox)anchor:"95%"}]},{columnWidth:.30,layout:"form",labelWidth:1,//让标签宽度为很小的值(奇怪的是为0时反而不行)items:[{xtype:"radio",boxLabel:"女",labelSeparator:"",//去除分隔符”:”name:"Sex",inputValue:"woman",anchor:"95%"}]}]},{//上面是第一行xtype:"panel",layout:"column",fieldLabel:"出生日期",isFormField:true,items:[{columnWidth:.5,xtype:"datefield",name:"BirthDate",anchor:"90%"},{columnWidth:.5,layout:"form",labelWidth:40,//注意,这个参数在这里可以调整简单fieldLabel的布局位置items:[{xtype:"combo",name:"Degree",fieldLabel:"学位",store:["小学","初中","高中","专科","本科","硕士","博士"],emptyText:"请选择适合你的学历",anchor:"90%"}]}]},{ //上面是第二行xtype:"panel",layout:"column",isFormField:true,fieldLabel:"使用框架",items:[{columnWidth:.2,xtype:"checkbox",boxLabel:"",name:"SpringNet",inputValue:"spring"//这里如果用value,值是on,所以用inputValue },{columnWidth:.2,layout:"form",labelWidth:1,items:[{xtype:"checkbox",boxLabel:"Nhibernate",labelSeparator:"",name:"NHibernate",inputValue:"nhibernate",anchor:"95%"}]},{columnWidth:.6,layout:"form",labelWidth:1,items:[{xtype:"checkbox",boxLabel:"Linq",labelSeparator:"",name:"Linq",inputValue:"linq",anchor:"95%"}]}]},{ //上面是第三行xtype:"textfield",fieldLabel:"Email",name:"Email",vtype:"email",//email验证,如果想自定义验证的话,请参见前面的文章vtypeText:"email格式错误!",anchor:"56%"//控制文本框的长度},{ //上面是第四行xtype:"textarea",fieldLabel:"个性签名",name:"OneWord",height:50,anchor:"95%"},{ //上面是第五行xtype:"htmleditor",fieldLabel:"想说的话",name:"WantToSay",anchor:"95%",enableAlignments:false,//去除左右对齐工具栏enableLists:false//去除列表工具栏}],buttons:[{text:"确定",handler:login,formBind:true},{text:"取消",handler:reset}]});function login(){form.form.submit();}function reset(){form.form.reset();}});ExtJs2.0学习系列(9)--Ext.TabPanel之第一式照旧,看个最简单的先,后面再详细说复杂的!效果图片:js代码:html代码:在这里例举几个参数:●tabPosition:"bottom"//选项卡的位置,枚举值bottom,top.默认为top(只有top的时候才能选项卡的滚动!)●tabTip:"提示"//必须先调用Ext.QuickTips.init();才有效果经常我们有这么个情况,一个选项卡加载一个页面,这里我提供一种不是很好但是很稳定的简单方法(已经在项目中验证没有出现问题).就是:使用iframe作为tab的标签页内容.1.用iframe加载其他完整页面的tabpanel.效果图:点击链接"换成博客园",html代码:js代码:今天的内容简单.就暂且说做到了这里,下篇中我们说说tabpanel的滚动标签和动态添加标签的tabpanel!ExtJs2.0学习系列(10)--Ext.TabPanel之第二式2.动态添加tabpanel的标签页效果图:点击"添加新标签页",会添加一个标签页,而且激活这个新的标签页.html代码:js代码:Ext.onReady(function(){Ext.QuickTips.init();var tabsDemo=new Ext.TabPanel({renderTo:Ext.getBody(),activeTab:0,height:700,frame:true,items:[{title:"autoLoad为html简单页面演示",autoLoad:{url:"tab1.htm",scripts:true}}]});//下面是添加新标签页的关键代码,很简单方便var index=0;Ext.get("AddNewTab").on("click",function(){tabsDemo.add({title:"newtab",id:"newtab"+index,html:"new tab",closable:true});tabsDemo.setActiveTab("newtab"+index);index++;})});简单说明:其实添加的话,只要add()方法就可以了,但是我们还要激活这个新的标签页,就必须setActiveTab(newtab的索引或id),关键就是我们不好判断这个索引,所以只好设置个递增的全局变量index来给newtab取名,这样我们也就能准确的获取新的不重复的newtab了,也就容易激活了.而且我们可以通过下图看出来.3.稍微修改上面的例子tabpanel(官方的例子)效果图:我就不多说了,关键的几个参数注释了下js代码:4.为tabpanel标签页添加右键菜单效果图:点击"关闭其他所有页"后,其他两个右键菜单还是道理相同.a)enableTabScroll:true//前面已经说过了b)listeners:{"contextmenu":function(参数1,参数2,参数3){.}}//右键菜单事件,三个参数分别为当前tabpanel,当前标签页panle,时间对象ec)扩充2,每个标签页都有激活和去激活事件activate和deactivate,他们的执行函数有个参数,就是当前标签页.menu=new Ext.menu.Menu()//menu组件,就不多说了,后面会专门分析下,不过不要忘记menu.showAt(e.getPoint());了html代码和上面的例子的html代码一样.js代码:Ext.onReady(function(){Ext.QuickTips.init();var tabsDemo=new Ext.TabPanel({renderTo:Ext.getBody(),//resizeTabs:true,宽度能自动变化,但是影响标题的显示activeTab:0,height:200,enableTabScroll:true,//挤的时候能够滚动收缩width:400,frame:true, //下面是比上面例子新增的关键右键菜单代码listeners:{//传进去的三个参数分别为:这个tabpanel(tabsDemo),当前标签页,事件对象e"contextmenu":function(tdemo,myitem,e){menu=new Ext.menu.Menu([{text:"关闭当前页",handler:function(){tdemo.remove(myitem);}},{text:"关闭其他所有页",handler:function(){//循环遍历tdemo.items.each(function(item){if(item.closable&&item!=myitem){//可以关闭的其他所有标签页全部关掉tdemo.remove(item);}});}},{text:"新建标签页",handler:addTab}]);//显示在当前位置menu.showAt(e.getPoint());}},items:[{title:"tab advantage",html:"sample1"}]});var index=0;function addTab(){tabsDemo.add({title:"ntab"+index,id:"newtab"+index,html:"new tab"+index,closable:true});tabsDemo.setActiveTab("newtab"+index);index++;}new Ext.Button({text:"添加新标签页",handler:addTab}).render(document.body,"AddBtn");});ExtJs2.0学习系列(11)--Ext.XTemplateXTemplate是Extjs里面的模板组件.下面我们看个最简单的例子.效果图:js代码:Ext.onReady(function(){//数据源var data={name:"博客园",read:[{book:'<<道不远人>>',date:'2007-7-7'},{book:"<<大话设计模式>>",date:"2006-6-6"}]}//呈现组件var mypanel=new Ext.Panel({width:400,id:"mypanel",title:"XtemplateData简单示例",renderTo:Ext.getBody()});//创建模板var tpl=new Ext.XTemplate('<table><tr><th>名称:{name}</th></tr>','<tr><td>','<tpl for="read">','<p>编号:{#},书:{book},日期:{date}</p>','</tpl></td></tr></table>');//重写绑定模板tpl.overwrite(mypanel.body,data);});a)pile();//可以在创建模板后,添加pile();编译代码,速度快点.b)tpl.overwrite(mypanel.body,data);//把数据填充到模板中去,并呈现到目标组件c)名称:{name}//对于一维单数据对象,直接用{名称}输出,d)<tpl for="read">//对于多维对象(如拥有多条数据的表),使用tpl和for配合使用,会使用tpl的格式把数据一条一条输出,read为上级节点e){.}//对于一维对数据的对象,如color: ['Red', 'Blue', 'Black'],可以用{.}按照tpl模板逐一输出,如:。
Extjs5开发学习-22-模块Form的自定义的设计
Extjs5开发学习-22-模块Form的自定义的设计前面几节完成了模块Grid的自定义,模块Form自定义的过程和Grid的过程类似,但是要更复杂一些。
先来设计一下要完成的总体目标。
1、可以有多个Form方案,对应于显示、新增、修改、审核、审批等功能;2、对于上述各种功能可以选择不同的Form方案,比如说修改可以有几个方案,各个操作员可以选择他们感兴趣的Form方案来进行数据的修改。
3、每个Form方案中可以定义若干个字段分组(FieldSet或FieldContainer)。
4、每个字段分组中可以放置若干个字段。
5、每个Form方案可以定义成Tab或者Accordion显示方式。
6、可以放置下级模块的Grid在Form中,即master-detail方式。
下面我贴几个图显示一下自定义生成的form界面,好有个直观的了解。
1、最基本的Form界面,上面只有一个FieldSet,里面有若干个字段,还有一些操作按钮。
2、由二个FieldSet组成的Form,其中某些可以折叠。
3、在Form中加入子模块的Grid。
4、在Form中加入Tab的样式。
5、某些特殊格式的Form表。
6、一个综合的比较复杂的例子:这个例子中加入单条记录的多个子模块,可以协同进行操作。
上面列出了一些在原来版本已经可以完成的Form类型,以上例子都是完全根据配置信息由extjs解释执行而生成的。
可以由管理人员在系统中直接新增和修改任何的Form 项,由此完成了模块Form完全自定义的功能。
在展示的FormField中,除了可以生成字符Field,也可以完成日期、数值、Combo 等复杂类型的字段,只要想得出来的功能,就能够写成配置,然后解释后展示出来。
在下面的实现过程中,由于没有前后台的交互,我只会做一个比较简单的例子来展示如何自定义Form的实现。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Ext.form.FieldSet的用法一、Ext.form.FieldSet的常用配置项:1、checkboxToggle : MixedTrue表示在lengend标签之前fieldset的范围内渲染一个checkbox,或者送入一个DomHelper的配置对象制定checkbox(默认为false)。
选择该checkbox会为展开、收起该面板服务。
2、checkboxName : String分配到fieldset的checkbox的名称,在#checkboxToggle = true的情况有效。
(默认为'[checkbox id]-checkbox')。
3、labelWidth : Number标签的宽度,该属性会影响下级的子容器。
4、itemCls : String关于容器的表单项元素的额外的CSS样式(默认为"",如容器的itemCls 有设置的话就用那个值)。
由于该样式是作用于整个条目容器的,这就会对在内的表单字段、label元素(若有指定)或其他元素只要属于条目内的元素都有效。
此组件只有在Ext.form.FormLayout FormLayout布局管理器控制的容器下渲染才有用。
5、baseCls : String作用在面板元素上的CSS样式类(默认为'x-panel')。
6、layout : String7、此容器所使用的布局类型。
如不指定,则使用缺省的yout.ContainerLayout类型。
当中有效的值可以是:accordion、anchor、border、cavd、column、fit、form和table。
针对所选择布局类型,可指定#layoutConfig进一步配置。
8、animCollapse : BooleanTrue 表示为面板闭合过程附有动画效果(默认为true,在类Ext.Fx 可用的情况下)。
9、bodyCfg : Object构成面板#body元素的Ext.DomHelper DomHelper配置对象。
这可能会对body元素采用另外一套的结构。
例如使用<center> 元素就代表将其中内容都居中显示。
10、headerCfg : Object面板#header元素的结构,符合Ext.DomHelper DomHelper配置的格式。
11、footerCfg : Object面板#footer元素的结构,符合Ext.DomHelper DomHelper配置的格式。
12、applyTo : Mixed节点的id,或是DOM节点,又或者是与DIV相当的现有元素,这些都是文档中已经存在的元素当使用applyTo后,主元素所指定的id或CSS样式类将会作用于组件构成的部分,而被创建的组件将会尝试着根据这些markup构建它的子组件。
使用了这项配置后,不需要执行render()的方法。
若指定了applyTo,那么任何由#renderTo传入的值将会被忽略并使用目标元素的父级元素作为组件的容器。
13、tbar : Object/Array面板顶部的工具条。
此项可以是Ext.Toolbar 的实例、工具条的配置对象,或由按钮配置项对象构成的数组,以加入到工具条中。
注意,此项属性渲染过后就不可用了,应使用#getTopToolbar的方法代替。
14、bbar : Object/Array面板底部的工具条。
此项可以是Ext.Toolbar 的实例、工具条的配置对象,或由按钮配置项对象构成的数组,以加入到工具条中。
注意,此项属性渲染过后就不可用了,应使用#getBottomToolbar的方法代替。
15、header : BooleanTrue表示为显式建立头部元素,false则是跳过创建。
缺省下,如不创建头部,将使用#title的内容设置到头部去,如没指定title则不会。
如果设置好title,但头部设置为false,那么头部亦不会生成。
16、footer : BooleanTrue表示为显式建立底部元素,false则是跳过创建。
缺省下,就算不声明创建底部,若有一个或一个以上的按钮加入到面板的话,也创建底部,不指定按钮就不会生成。
17、title : String显示在面板头部的文本标题(默认为'')。
如有指定了titile那么头部元素(head)会自动生成和显示,除非#header强制设为false。
如果你不想在写配置时指定好title,不过想在后面才加入的话,你必须先指定一个非空的标题(具体说是空白字符''亦可或header:true),这样才保证容器元素生成出来。
18、buttons : Array在面板底部加入按钮,Ext.Button配置的数组。
19、autoLoad : Object/String/Function一个特定的url反馈到Updater的Ext.Updater#update方法。
若autoLoad非null,面板会尝试在渲染后立即加载内容。
同时该面板#body元素的默认URL属性就是这URL,所以可随时调用Ext.Element#refresh refresh的方法。
20、frame : BooleanTrue表示为面板的边框外框可自定义的,false表示为边框可1px的点线(默认为false)。
21、border :BooleanTrue表示为显示出面板body元素的边框,false则隐藏(缺省为true),默认下,边框是一套2px宽的内边框,但可在#bodyBorder中进一步设置22、bodyBorder : BooleanTrue表示为显示出面板body元素的边框,false则隐藏(缺省为true),只有#border == true时有效。
若border == true and bodyBorder == false,边框则为1px宽,可指定整个body元素的内置外观。
23、bodyStyle :String/Object/Function制定body元素的CSS样式。
格式形如Ext.Element#applyStyles(缺省为null)。
24、iconCls : String一个能提供背景图片的CSS样式类,用于面板头部的图标:(默认为'')。
25、collapsible : BooleanTrue表示为面板是可收缩的,并自动渲染一个展开/收缩的轮换按钮在头部工具条。
false表示为保持面板为一个静止的尺寸(缺省为false)26、tools : Array一个按钮配置组成的数组,加入到头部的工具条区域。
渲染过程中,每一项工具都保存为Ext.Element Element对象,都集中保存在属性tools.<tool-type>之中。
27、toolTemplate :Ext.Template/Ext.XTemplate位于#header中的tools其模板是什么。
默认是:28、hideCollapseTool : BooleanTrue 表示为不出展开/收缩的轮换按钮,当#collapsible = true,false就显示(默认为false)。
29、titleCollapse : BooleanTrue表示为允许单击头部区域任何一个位置都可收缩面板(当#collapsible = true)反之只允许单击工具按钮(默认为false)。
30、autoScroll : BooleanTrue表示为在面板body元素上,设置overflow:'auto'和出现滚动条false表示为裁剪所有溢出的内容(默认为false)。
31、floating : BooleanTrue表示为浮动此面板(带有自动填充和投影的绝对定位),false表示为在其渲染的位置"就近"显示(默认为false)。
设置floating为true,将会在面板元素的基础上创建一个yer 同时让面板显示到非正数的坐标上去了,不能正确显示。
因此面板必须精确地设置渲染后的位置,也就是使用绝对的定位方式。
(如:myPanel.setPosition(100,100);)若一个浮动面板是没有固定其宽度的,这导致面板会填满与视图右方的区域。
该属性也可以是创建那个yer对象所用的配置项对象。
32、shadow : Boolean/StringTrue 表示为(或一个有效Ext.Shadow#mode值)在面板后显示投影效果(默认为'sides'四边)。
注意此项只当floating = true时有效。
33、shadowOffset : Number投影偏移的象素值(默认为4)。
注意此项只当floating = true时有效。
34、shim : BooleanFalse 表示为禁止用iframe填充,有些浏览器可能需要设置(默认为true)。
注意此项只当floating = true时有效35、html : String/Object一段HTML片段,或Ext.DomHelper DomHelper配置项作为面板body内容(默认为'')。
面板的afterRender方法负责HTML内容的加入这一过程,所以render事件触发的时刻document还没有所说的HTML内容。
该部分的内容又比#contentEl的显示位置而居前。
36、contentEl : String用现有HTML节点的内容作为面板body的内容(缺省为'')。
面板的afterRender方法负责了此HTML元素的加入到面板body中去。
该部分的内容又比#html HTML的显示位置而居后,所以render事件触发的时刻document还没有所说的HTML内容。
37、keys : Object/ArrayKeyMap的配置项对象(格式形如:Ext.KeyMap#addBinding)。
可用于将key分配到此面板(缺省为null)。
38、draggable : Boolean虽然Ext.Panel.DD 是一个内部类并未归档的,但亦可自定义拖放(drag/drop)的实现,具体做法是传入一个Ext.Panel.DD的配置代替true 值。
它是Ext.dd.DragSource的子类,所以可在实现Ext.dd.DragDrop的接口方法的过程中加入具体行为:39、tabTip : Stringtooltip的innerHTML字符串(也可以html标签),当鼠标移至tab时会显示。
这时Ext.Panel充当的角色是Ext.TabPanel某一子面板。