ExtJS (3.3的使用)

版权声明:作品为本人原创,如需转载,请注明出处 aa15237104245的博客 https://blog.csdn.net/aa15237104245/article/details/83148242

项目中使用到 EXT 3.3/3.4 做开发(09年的项目)

 下载 Ext 3.3所需的 资料

目录

 1  面板的创建

2  viewPort 的创建

3 对话框,弹出框

 4 选项板 (tabpanel)

也可以直接把html中的标签替换成TabPanel

动态tab


 1  面板的创建

  显示一个panel


<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
	
	<link type="text/css" rel="stylesheet" href="ext-3.3.0/resources/css/ext-all.css" />
	<script language="javascript" src="ext-3.3.0/adapter/ext/ext-base.js"></script>
	<script language="javascript" src="ext-3.3.0/ext-all.js"></script>
	<script language="javascript" src="ext-3.3.0/src/locale/ext-lang-zh_CN.js"></script>
	</head>
	
<body>
 <script type="text/javascript">
        Ext.onReady(function(){
           new Ext.Panel({
              title: "面板用法",
              width: 300,
              height: 200,
              renderTo: Ext.getBody(),
              html: "<h1>面板主区域</h1>",
              tbar: [{
                 text: "顶部工具栏topToolbar"
              }],
              bbar: [{
                 text: "底部工具栏bottomToolbar"
              }],
              buttons: [{
                 text: "按钮位于footer"
              }]
           });
        });
        </script>
</body>
</html>	

可以显示一个简单的panel

    panel分为5个部分:
         顶部工具栏 (tbar),底部工具栏(bbar),面板头部(header),面板底部(bottom),面板主区域(body)

其中: height / width 定义panel显示的宽高

title 是panel的标题

html 是panel中显示的内容

renderTo 确定panel显示的位置

一般把所有的工具栏和面板上的按钮放到一起

 new Ext.Panel({
              title: "面板用法",
              width: 300,
              height: 200,
              renderTo: div2,
              html: "<h1>面板主区域</h1>",
              tbar: [{
                 text: "顶部工具栏"
              },{
                 text: "底部工具栏"
              },{
                 text: "刷新"
              }
			  ],
              
              buttons: [{
                 text: "按钮位于footer"
              }]
           });

面板Panel主要有下面几个特点:

1)、面板可以理解成应用程序中的一个界面块,这个块可以大,也可以小,这一个块包含了特定的样式信息;

2)、面板Panel继承自Container类,因此,面板是一个可视化容器组件;也是其它大多数可视化控件如TabPanel、Window、TreePanel的基类;

3)、面板中即可包括其它元素组件,也可以包含特定html代码片段,可以在程序中动态更新面板中的内容;

4)、面板由固定的5个部分组成,除了body部份以外,其它部分都不是必须的。

  

如果要在面板中放置Ext组件或控件元素,则可以通过面板的items属性来指定,这个属性的值可以是一个数组,表示面板中有很多子元素,也可以是一个对象,表示面板中只定义一个子元素。当面板对象创建以后,可以通过面板容器的add、insert来动态往面板中增加子元素,用remove方法来在面板动态删除子元素。

2  viewPort 的创建


 <script type="text/javascript">
        Ext.onReady(function(){
         
		   
		    new Ext.Viewport({
             
             layout :'fit', 
              items: [{
			  title: "viewPort",
               html : 'Viewport html',
			  tbar: [{
                 text: "按钮1"
              },{
                 text: "按钮2"
              }
			  ]
           }],
		   });
		     });
		 </script>

效果:

Viewport不需要再指定renderTo,而我们也看到Viewport确实填充了整个浏览器显示区域,并会随着浏览器显示区域大小的改变而改改。他有三个特点:

1)、创建即可使用。不需要渲染,当组件在创建时会自动渲染到document.body节点。

2)、不能使用程序改变该控件的大小,也没有滚动条。

3)、只是作为容器组件,没有额外的属性、方法及事件

Layout制定页面的布局方式

Fit:
在Fit布局中,子元素将自动填满整个父容器。注意:在fit布局下,对其子元素设置宽度是无效的。如果在fit布局中放置了多个组件,则只会显示第一个子元素。典型的案例就是当客户要求一个window或panel中放置一个GRID组件,grid组件的大小会随着父容器的大小改变而改变。

border:
border布局:border布局也称边界布局,他将页面分隔为west,east,south,north,center这五个部分,我们需要在在其items中指定使用region参数为其子元素指定具体位置。

north和south部分只能设置高度(height),west和east部分只能设置宽度(width)。north south west east区域变大,center区域就变小了。

参数 split:true 可以调整除了center四个区域的大小。

参数 collapsible:true 将激活折叠功能, title必须设置,因为折叠按钮是出现标题部分的。

center 区域是必须使用的,而且center 区域不允许折叠。Center区域会自动填充其他区域的剩余空间。尤其在Extjs4.0中,当指定布局为border时,没有指定center区域时,会出现报错信息。
 

一般Viewport 用来做主页面

<script type="text/javascript">
        Ext.onReady(function(){
         
		   
		    new Ext.Viewport({
               enableTabScroll: true,
				layout :'border', 
              items: [{
			  title: "NORTH",
			  region : 'north',
			  height : 50,
               html : '标题',
			  
           },{
			  title: "WEST",
			  region : 'west',
			  height : 200,
               html : '左侧导航栏',
			    collapsible:true, 
			
           },{
			  xtype :'tabpanel',
			  region : 'center',
			  items : [
			  {
			  title : "center1"
			  },{
			  title : "panel2"
			  } ]
             } ],
		   });
		     });
		 </script>

效果图:

3 对话框,弹出框

Ext对对话框进行了进一步的优化,


 <script type="text/javascript">
        
		function dalert(){
		 alert("弹出框");
		}
		function dconfirm(){
		var con = confirm("是否确定")
		alert("选择结果:" + (con?"是":"否"))
		}
		
		function dprompt(){
		var prop =prompt("请输入");
		alert("你输入的是: " + prop)
		}
		
	
	 function  alertExt(){
	 Ext.MessageBox.alert("ext 弹出框")
	 }
	
	function confirmExt(){
	Ext.Msg.confirm("选择确认","是否选择?",function(mess){
	 Ext.MessageBox.alert("选择结果 :"  +(mess == "yes" ? "是" : "否"))
	})
	}
	function promptExt() {
	Ext.MessageBox.prompt("姓名输入","请输入你的姓名:" ,function (mess,text){
	if(mess == "ok"){
	 Ext.MessageBox.alert("你输入的是 :"  +text)
	}else{
	 Ext.MessageBox.alert("你放弃了输入")
	}
	})
	}
	
		
		 </script>
		 
			 
<input type="button" onClick="dalert();" value ='弹出框' >  
<input type="button" onClick="dconfirm();" value ='确认框' > 
<input type="button" onClick="dprompt();"  value ='输入框'> 
		 
		 
<input type="button" onClick="alertExt();" value ='EXT 弹出框'> 
<input type="button" onClick="confirmExt();" value ='EXT 确认框'>
<input type="button" onClick="promptExt();" value ='EXT 输入框'> 

Ext 对话框一般包含四个参数:

( String title, String msg, [Function fn], [Object scope] )

其中title 为标题, msg 为提示信息,属于必填项

function 是回调函数, scope 是作用于  属于可选项

EXT 对话框效果 :  只在网页中信显示一个很小的弹出框,增加灰色遮罩

建立更好看的对话框

进度条


	function waitd(){
  var waitbox=Ext.Msg.wait("正在保存数据,请稍候。。。","友情提示"); //显示等待对话框
           waitbox.hide.defer(5000, waitbox); //隐藏对话框
	}

效果

滚动条:

	
	var i=0;
	function progress(){
	i=0;
	
	var msgbx = Ext.Msg.progress("请等待","加载页面","数据加载中,请稍候...")  //显示等待对话框

		updatep();
	}
	function updatep (){
	i+=0.1;
	Ext.Msg.updateProgress(i);
	if(i>1){
	Ext.Msg.hide();
	}else{
	updatep.defer(1000);
	}
	
	}

使用show( ) 调用对话框


	function save(){
	Ext.Msg.show({
	 title : "保存数据",
	 msg :'是否保存?',
	 buttons : Ext.Msg.YESNOCANCEL,
	 fn : callback,
	 icon :Ext.MessageBox.QUESTION
	});
	
	function callback (btn,text){
	if(btn == 'yes'){
	alert ("保存完成")
	
	}else if(btn =='no'){
	alert ("没有保存")
	}else{
	alert("取消操作")
	}
	
	}
	
	}

 4 选项板 (tabpanel)

<script language="javascript">
Ext.onReady(function(){  
   new Ext.TabPanel({
		renderTo : 'div1',
        width: 300,  //当前tab的宽度
        height:400,  //当前tab的高度
		enableTabScroll:true,  //当tab较多时,会自动出现箭头隐藏之前的tab
		 activeTab: 0, //默认选择第一个tab
       
  
       items: [  
            {title:"面板一", html:"嵌套面板一"}, 
			 {title:"面板二", //tab的名称
			html:"嵌套面板二", //tab的内容
			closable:'true'    //tab名称的右上角增加删除按钮,点击可删除当前tab
			},  
			{title:"面板三", html:"嵌套面板三", closable:'true'}  
        ]  
    });  
  
});  
</script>

效果

也可以直接把html中的标签替换成TabPanel


<div id='test'>
<div class='x-tab' title='div1' >1 </div>
<div class='x-tab' title='div2'>2 </div>
	<div title='div3'>
	3
		<div class='x-tab' title='div4'>4</div> 
	</div>
</div>

<script language="javascript">
Ext.onReady(function(){  
   new Ext.TabPanel({
		applyTo : 'test',
	    activeTab: 0, //默认选择第一个tab
		autoTabs : true,
		deferredRender : false,
		 
    });  
  
});  
</script>

必须设置 TabPanel 的属性

把autoTabs项设置为true,把deferredRender项设置为false,然后通过applyTo项指定把页面中包含class="x-tab"这种样式的子节点的DOM节点应用于选项板

效果:

由于<div title='div3'> 的class 不是"x-type",所以不会解析成tab, 而<div class='x-tab' title='div4'> 虽然与 div1,div2不在一个节点下,但是仍然会被解析成tab

动态tab

<script language="javascript">
Ext.onReady(function(){  
var i=0;
   var  tabs= new Ext.TabPanel({
   
		renderTo : Ext.getBody(),
        width: 300,  //当前tab的宽度
        height:400,  //当前tab的高度
		enableTabScroll:true,  //当tab较多时,会自动出现箭头隐藏之前的tab
		 activeTab: 0, //默认选择第一个tab
        bbar :[
		
		{
		text : 'add',
		handler :function (){
		tabs.add({
		title : "新面板"+i++,
		closable :true 
		});
		}
		},
		{
		text : 'insert',
		handler :function (){
		tabs.insert(0,{
		title : "新面板"+i++,
		closable :true 
		});
		
		}
		},
		
		{
		text : 'delete',
		handler :function (){		
		if(tabs.activeTab.closable) {
		tabs.remove(tabs.activeTab)
		}
		}
		},
		{
		text : '关闭所有',
		handler :function (){
		
		tabs.items.each(function(p){
		if(p.closable) {
		tabs.remove(p)
		}
		} )
		
		}
		}
		
		
		],
  
        items: [  
            {title:"面板一", html:"嵌套面板一"}, 
			 {title:"面板二", //tab的名称
			html:"嵌套面板二", //tab的内容
			closable:'true'    //tab增加删除按钮
			},  
			{title:"面板三", html:"嵌套面板三", closable:'true'}  
        ]  
    });  
  
});  

可以动态的增加和删除,但是,删除掉时候,会自动跳到初始的面板中,

5 布局

  所谓布局就是指容器组件中子元素的分布、排列组合方式。Ext的所有容器组件都支持布局操作,每一个容器都会有一个对应的布局,布局负责管理容器组件中子元素的排列、组合及渲染方式等

Ext中的一些容器组件都已经指定所使用的布局,比如TabPanel使用card布局、FormPanel使用form布局,GridPanel中的表格使用column布局等,我们在使用这些组件的时候,不能给这些容器组件再指定另外的布局。

Border布局,把容器分成东西南北中几大区域,容器中的元素可以通过region属性来指定子元素放置在容器中的什么位置。
Column布局,把子元素按列排放,通过columnWidth及width属性来指定子元素的所占的列宽度。
Form布局,容器中的元素包括标题及组件内容两项值。
Fit布局,子元素填充整个容器区域。
Accordion布局,折叠布局

6  表单(formPanel)

formPanel 继承自panel ,在panel的基础上提高与表单相关的各种特性, 固定使用form布局

<script language="javascript">
 Ext.onReady(function(){
           new Ext.form.FormPanel({
		    renderTo :Ext.getBody(),
             title : '信息录入',
              height: 200,
              width: 300,
               labelWidth : 60,
              labelAlign: "right",
              frame: true,
               defaults : {
		    xtype : 'textfield',
			width :180
		  },
              items: [
                 {name: "username", fieldLabel: "姓名"},
                 {name: "password", fieldLabel: "密码", inputType: "password"},
                 {name: "email", fieldLabel: "电子邮件"},
                 {xtype: "textarea", name: "intro", fieldLabel: "简介"}
              ],
              buttons:[{text:"提交"}, {text:"取消"}]
           });
        });
</script>

结果:

其中: 

new Ext.form.FormPanel  来创建表单面板, labelWid表单中标签的宽度,labelAlign 指定字段标签的对齐方式

defaults 中指定该容器中所有子元素默认类型都是 textfield(文本框), 在items定义的子元素中, 都包含一个name属性,相当于

input 标签中的name属性, fieldLabel 指定字段标签,

BasicForm 

  formPanel 包含一个form属性,该属性是一个 Ext.form.BasicForm 类型的对象,可以直接访问,也可以通过 getForm()方法得到.

BasicForm 表示基本的表单,包含了submit ,load,reset等方法,用来代替 html中<form>标签中的submit,reset等方法,通过调用这些方法可以实现表单提交,信息重置等操作;

 优化上个示例

 buttons:[
			  {
			  text:"提交",
			  handler : function (){
			  f.form.submit({
			  waitTtle : '数据提交',
			  waitMsg : '表单提交中,请稍候...'
			  });
			  }
			  }, {
			  text:"重置",
			  handler : function (){
			  f.form.reset();
			  }
			  }]

能够模拟表单提交,重置功能

表单元素 Field 

field 代表各种各样的数据录入项, 在程序中,一般直接使用 field的子类, 包括Checkbox, CheckboxGroup, CompositeField, DisplayField, Hidden, HtmlEditor, SliderField, TextField等。

field组件一般包括一个fieldLabel属性和一个name属性

表格(GridPanel)

  表格由类Ext.grid.GridPanel定义,继承自Panel,其xtype为grid。

ExtJS中,表格Grid必须包含列定义信息,并指定表格的数据存储器Store。

表格的列信息由类Ext.grid.Column(以前是由Ext.grid.ColumnModel定义)

表格的数据存储器由Ext.data.Store定义,数据存储器根据解析的数据不同分为JsonStore、SimpleStroe、GroupingStore等。


<script language="javascript">
 Ext.onReady(function(){
			var  data =[
			
			[0,'c语言','C语言程序设计','张老师'],
			[1,'c++','c++程序设计','李老师'],
			[2,'java','java课程设计','刘老师'],
			[3,'操作系统','操作系统入门','吴老师']
			];
		var store = new Ext.data.SimpleStore({
		  data : data,
		  fields : ['id','names','course','teacher']
		
		});
		
		var grid =new Ext.grid.GridPanel({
		renderTo : Ext.getBody(),
		title  : '编程课程'	,
		height : 500,
		width : 400,
		columns :[
		{header : '编号',dataIndex : 'id'},
		{header : '名称',dataIndex : 'names'},
		{header : '课程',dataIndex : 'course'},
		{header : '老师',dataIndex : 'teacher'},
		],
		store : store,
		autoExplandColumn : 2
		});
		
 })

</script>

效果:

其中:  dataIndex 的值要与store中的fields相对应

TreePanel 

同步树:

<script language="javascript">
 Ext.onReady(function(){
 
			var  rootNode= new Ext.tree.TreeNode({
			id :"root",
			text : "根节点"
			});
			var childNode =new Ext.tree.TreeNode({
			id :"c1",
			text : "子节点"
			});
			
			rootNode.appendChild(childNode);
			
		var store = new Ext.tree.TreePanel({
		 renderTo : Ext.getBody(),
		 root :  rootNode,
		 width: 100
		
		});
		
 })

</script>

TreeNode 表示一个树节点,常用属性有:

 id , text , icon, checked

 

猜你喜欢

转载自blog.csdn.net/aa15237104245/article/details/83148242