首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > JavaScript >

ExtJs-格局

2012-11-10 
ExtJs----布局????????????在EXT中,所有的布局都是从Ext.Container开始的,Ext.Container的父类是Ext.BoxCo

ExtJs----布局

????????
????在EXT中,所有的布局都是从Ext.Container开始的,Ext.Container的父类是Ext.BoxComponent。Ext.BoxComponent是一个盒子组件,可以定义宽度,高度和位置等属性。作为子类,Ext.Container也继承了这些功能,更重要的是,Ext.Container可以使用layout和items属性未作内部的子组件进行布局。
????事实上,我们经常用来设置布局的子类也只有几个,比如用Ext.Viewport进行页面的整体布局,使用Ext.Panel和Ext.Window进行各种嵌套布局,使用Ext.form.FieldSet和Ext.form.FormPanel为表单进行布局。其余的子类都使用默认的渲染形式,很少进行内部布局。
????与Ext.Container相似,所有的布局类也有一个共同的超类Ext.layout.ContainerLayout。凡是继承该超类的子类都可以对Ext.Container和它的子类进行布局定义,这两颗继承树结合在一起便构成了EXT中完整的布局系统。

最简单的布局FitLayout
????
1ExtJs-格局ExtJs-格局var?viewport?=?new?Ext.Viewport(ExtJs-格局{
2ExtJs-格局????layout:'fit',
3ExtJs-格局????items:[grid]
4ExtJs-格局})

????它可以自动适应页面大小的变化,填充整个页面。但如果在items中放入两个控件,会发现第二个控件没有任何效果。即FitLayout布局每次只能使用一个子组件。

常用的边框布局BorderLayout?

?????它将整个布局区域分成了东、西、南、北、中5个部分,除了中间区域以外,其他的区域又都是可以省略的。

ExtJs-格局ExtJs-格局var?viewport?=?new?Ext.Viewport(ExtJs-格局{
ExtJs-格局????layout:'border',
ExtJs-格局????items:[
ExtJs-格局ExtJs-格局????????ExtJs-格局{region:'north',html:'north'},
ExtJs-格局ExtJs-格局????????ExtJs-格局{region:'south',html:'south'},
ExtJs-格局ExtJs-格局????????ExtJs-格局{region:'east',html:'east'},
ExtJs-格局ExtJs-格局????????ExtJs-格局{region:'west',html:'west'},
ExtJs-格局ExtJs-格局????????ExtJs-格局{region:'center',html:'center'}
ExtJs-格局????]
ExtJs-格局});
????重复一遍,center是绝对不能省的,否则会报错导致程序中断。
??? 在此布局中,north和south可以通过设置height来设置高度(也只能设置高度);west和east部分可以通过设置width来设置宽度(也只能设置宽度);同时,我们可以使用split来允许用户自行拖放以改变某一个区域的大小。如:

1ExtJs-格局ExtJs-格局var?viewport?=?new?Ext.Viewport(ExtJs-格局{
2ExtJs-格局????layout:'border',
3ExtJs-格局????items:[
4ExtJs-格局ExtJs-格局????????ExtJs-格局{region:'north',html:'north'},
5ExtJs-格局ExtJs-格局????????ExtJs-格局{region:'west',html:'west',width:100,split:true},
6ExtJs-格局ExtJs-格局????????ExtJs-格局{region:'center',html:'center'}
7ExtJs-格局????]
8ExtJs-格局})
????当然,在使用split属性时,我们也可以搭配minSize和MaxSize属性来控制最小高度和最大高度。
????使用collapsible:true激活了区域的折叠功能,这需要搭配title参数一起使用。

制作伸缩菜单的布局----Accordion???
????1ExtJs-格局ExtJs-格局var?viewport?=?new?Ext.Viewport(ExtJs-格局{
?2ExtJs-格局????layout:'border',
?3ExtJs-格局ExtJs-格局????items:[ExtJs-格局{
?4ExtJs-格局????????region:'west',
?5ExtJs-格局????????width:200,
?6ExtJs-格局????????layout:'accordion',
?7ExtJs-格局ExtJs-格局????????layoutConfig:ExtJs-格局{
?8ExtJs-格局????????????titleCollapse:true,
?9ExtJs-格局????????????animate:true,
10ExtJs-格局????????????activeOnTop:false
11ExtJs-格局????????},
12ExtJs-格局ExtJs-格局????????items:[ExtJs-格局{
13ExtJs-格局????????????title:'第一栏',
14ExtJs-格局????????????html:'第一栏'
15ExtJs-格局ExtJs-格局????????},ExtJs-格局{
16ExtJs-格局????????????title:'第二栏',
17ExtJs-格局????????????html:'第二栏'
18ExtJs-格局ExtJs-格局????????},ExtJs-格局{
19ExtJs-格局????????????title:'第三栏',
20ExtJs-格局????????????html:'第三栏'
21ExtJs-格局????????}]
22ExtJs-格局ExtJs-格局????},ExtJs-格局{
23ExtJs-格局????????region:'center',
24ExtJs-格局????????split:true,
25ExtJs-格局????????border:true
26ExtJs-格局????}]
27ExtJs-格局});????
实现操作向导的布局----CardLayout
????
???
CardLayout可以看做是一叠卡片,从上面看起来就像是一张卡片,可以把中间的卡片抽出来,放到最上面,可以每次只能看到一张卡片。
?1ExtJs-格局ExtJs-格局var?viewport?=?new?Ext.Viewport(ExtJs-格局{
?2ExtJs-格局????layout:'border',
?3ExtJs-格局ExtJs-格局????items:[ExtJs-格局{
?4ExtJs-格局????????region:'west',
?5ExtJs-格局????????id:'wizard',
?6ExtJs-格局????????width:200,
?7ExtJs-格局????????title:'某某向导',
?8ExtJs-格局????????layout:'card',
?9ExtJs-格局????????activeItem:0,
10ExtJs-格局????????bodyStyle:'padding:15px',
11ExtJs-格局ExtJs-格局????????defaults:ExtJs-格局{
12ExtJs-格局????????????border:false
13ExtJs-格局????????},
14ExtJs-格局ExtJs-格局????????bbar:[ExtJs-格局{
15ExtJs-格局????????????id:'move-prev',
16ExtJs-格局????????????text:'上一步',
17ExtJs-格局????????????handler:navHandler.createDelegate(this,[-1]),
18ExtJs-格局????????????disalbed:true
19ExtJs-格局ExtJs-格局????????},'->',ExtJs-格局{
20ExtJs-格局????????????id:'move-next',
21ExtJs-格局????????????text:'下一步',
22ExtJs-格局????????????handler:navHandler.createDelegate(this,[1])
23ExtJs-格局????????}],
24ExtJs-格局ExtJs-格局????????items:[ExtJs-格局{
25ExtJs-格局????????????id:'card-0',
26ExtJs-格局????????????html:'<h1>哈哈!<br/>欢迎用咱的向导。</h1><p>第一步,一共三步</p>'
27ExtJs-格局ExtJs-格局????????},ExtJs-格局{
28ExtJs-格局????????????id:'card-1',
29ExtJs-格局????????????html:'<p>第二步,一共三步</p>'
30ExtJs-格局ExtJs-格局????????},ExtJs-格局{
31ExtJs-格局????????????id:'card-2',
32ExtJs-格局????????????html:'<h1>恭喜恭喜,完成了</p>'
33ExtJs-格局????????}]
34ExtJs-格局ExtJs-格局????},ExtJs-格局{
35ExtJs-格局????????region:'center',
36ExtJs-格局????????split:true,
37ExtJs-格局????????border:true
38ExtJs-格局????}]
39ExtJs-格局});
40ExtJs-格局
????示例代码实现了大致的逻辑,但控制上下页翻页的代码(handler)未详细给出。

控制位置和大小的布局----AnchorLayout和AbsoluteLayout
???
AnchorLayout提供了一种灵活的布局方式,即可以为item中的每个组件指定与总体布局大小的差值,也可以设置一个比例使子组件可以根据整体自行计算本身的大小。它为我们提供给了三种配置方式。
??? 第一种方式是使用百分比进行配置,我们可以设置某一个子组件占整体长和宽的百分比。如:
?1ExtJs-格局ExtJs-格局????var?viewport?=?new?Ext.Viewport(ExtJs-格局{
?2ExtJs-格局????????layout:'anchor',
?3ExtJs-格局ExtJs-格局????????items:[ExtJs-格局{
?4ExtJs-格局????????????title:'panel?1',
?5ExtJs-格局????????????html:'panel?1',
?6ExtJs-格局????????????anchor:'50%?50%'
?7ExtJs-格局ExtJs-格局????????},ExtJs-格局{
?8ExtJs-格局????????????title:'panel?2',
?9ExtJs-格局????????????html:'panel?2',
10ExtJs-格局????????????anchor:'80%'
11ExtJs-格局????????}]
12ExtJs-格局????});
????第二种方式是直接设置与右侧和底部的边距,如:
?1ExtJs-格局ExtJs-格局????var?viewport?=?new?Ext.Viewport(ExtJs-格局{
?2ExtJs-格局????????layout:'anchor',
?3ExtJs-格局ExtJs-格局????????items:[ExtJs-格局{
?4ExtJs-格局????????????title:'panel?1',
?5ExtJs-格局????????????html:'panel?1',
?6ExtJs-格局????????????anchor:'-50?-200'
?7ExtJs-格局ExtJs-格局????????},ExtJs-格局{
?8ExtJs-格局????????????title:'panel?2',
?9ExtJs-格局????????????html:'panel?2',
10ExtJs-格局????????????anchor:'-100'
11ExtJs-格局????????}]
12ExtJs-格局????});
13ExtJs-格局});
??? 第三种方式称为side。使用它的前提是:为作为布局整体的父组件和布局内部的子组件都设置好width、height和anchorSize属性。AnchorLayout会记录布局整体与子组件的大小上的差值,为以后调整布局提供依据。

?1ExtJs-格局ExtJs-格局????var?viewport?=?new?Ext.Viewport(ExtJs-格局{
?2ExtJs-格局????????layout:'anchor',
?3ExtJs-格局ExtJs-格局????????anchorSize:ExtJs-格局{width:400,height:300},?
?4ExtJs-格局ExtJs-格局????????items:[ExtJs-格局{
?5ExtJs-格局????????????title:'panel?1',
?6ExtJs-格局????????????html:'panel?1',
?7ExtJs-格局????????????width:200,
?8ExtJs-格局????????????height:100,
?9ExtJs-格局????????????anchor:'r?b'
10ExtJs-格局ExtJs-格局????????},ExtJs-格局{
11ExtJs-格局????????????title:'panel?2',
12ExtJs-格局????????????html:'panel?2',
13ExtJs-格局????????????width:100,
14ExtJs-格局????????????height:200,
15ExtJs-格局????????????anchor:'r?b'
16ExtJs-格局????????}]
17ExtJs-格局????});????
????我们为Viewport设置了anchorSize,这是一个包含宽度和高度信息的JSON对象,以此作为以后计算差值的基准。然后在panel 1和panel 2中设置宽度和高度的信息。anchor的设置只有anchor:'r b'一种,这是固定的写法,也可以写成anchor:'right buttom',两种写法完全相同。
????AbsoluteLayout是AnchorLayout的一个子类,继承了AnchorLayout的所有特性。AnchorLayout布局下的子组件都是自上而下竖直排列的,不能控制每个组件的位置,而AbsolutLayout可以通过设置x,y参数达到控制子组件位置的效果。

表单专用的布局FormLayout
???
FormLayout也是AnchorLayout的一个子类,可以再它里面使用anchor设置宽和高的比例。但是它主要还是用于对表单进行布局。首先要明白一点,Ext.form.FormPanel使用它作为默认的布局方式。也正因为使用了FormLayout布局,我们设置的fieldLabel、boxLabel才能显示出来,而FormLayout里也提供给了一系列的参数来控制这些显示效果。
??? hideLabels:是否隐藏field的标签
??? itemCls:表单显示的样式
??? labelAlign:标签的对齐方式
??? labelPad:标签空白的像素值
??? labelWidth:标签宽度
??? clearCls:清除div渲染的CSS样式
??? fieldLabel:对应field的标签内容
??? hideLabel:是否隐藏标签
??? itemCls:Field的CSS样式
??? labelSeparator:标签和field之间的分隔,默认是:
??? labelStyle:标签的CSS样式

分列式的布局ColumnLayout
?1ExtJs-格局ExtJs-格局var?viewport?=?new?Ext.Viewport(ExtJs-格局{
?2
ExtJs-格局????layout:'column',
?3ExtJs-格局ExtJs-格局????items:[ExtJs-格局
{
?4ExtJs-格局????????title:'Column?1
',
?5ExtJs-格局????????columnWidth:.25

?6ExtJs-格局ExtJs-格局????},ExtJs-格局<span style