`
iwebcode
  • 浏览: 2010407 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

ExtJS layout的样式详解

 
阅读更多

http://wjt276.iteye.com/blog/453207

extjs的容器组件都可以设置它的显示风格,它的有效值有absolute, accordion, anchor, border, card, column, fit, form and table.一共9种

一、absolute顾名思义,在容器内部,根据指定的坐标定位显示

二、accordion这个是最容易记的,手风琴效果,表示可折叠的布局,也就是说使用该布局的容器组件中的子元素是可折叠的形式

Js代码收藏代码
  1. Ext.onReady(function(){
  2. varpanel=newExt.Panel({//Ext.formPanel就是Panel中用了form布局
  3. renderTo:'paneldiv',
  4. title:'容器组件',
  5. layout:'accordion',
  6. width:500,
  7. height:200,
  8. layoutConfig:{animate:false},//表示在执行展开折叠时是否应用动画效果
  9. items:[
  10. {title:'元素1',html:''},
  11. {title:'元素2',html:''},
  12. {title:'元素3',html:''},
  13. {title:'元素4',html:''}
  14. ]
  15. }
  16. );
  17. });

上面的代码定义了一个容器组件,指定使用Accordion布局,该容器组件中包含三个子元素,在layoutConfig中指定布局配置参数animatetrue,表示在执行展开折叠时是否应用动画效果。点击每一个子元素的头部名称或右边的按钮,则会展开该面板,并收缩其它已经展开的面板执行结果将生成如下图所示的界面:----001----



三、anchor这个效果具体还不知道有什么用,就是知道注意一下

1.容器内的组件要么指定宽度,要么在anchor中同时指定高/宽,
2.anchor值通常只能为负值(指非百分比值),正值没有意义,
3.anchor必须为字符串值

四、Border布局由类Ext.layout.BorderLayout定义,布局名称为border

该布局把容器分成东南西北中五个区域,分别由eastsouth, westnorth, cente来表示,在往容器中添加子元素的时候,我们只需要指定这些子元素所在的位置,Border布局会自动把子元素放到布局指定的位置。看下面的代码:

例一:

Js代码收藏代码
  1. Ext.onReady(function(){
  2. newExt.Viewport({
  3. layout:"border",
  4. items:[{
  5. region:"north",
  6. height:50,
  7. title:"顶部面板"
  8. },
  9. {region:"south",
  10. height:50,
  11. title:"底部面板"},
  12. {region:"center",
  13. title:"中央面板"},
  14. {region:"west",
  15. width:100,
  16. title:"左边面板"},
  17. {region:"east",
  18. width:100,
  19. title:"右边面板"}
  20. ]
  21. });
  22. });

----002----



例二:

Js代码收藏代码
  1. Ext.onReady(function(){
  2. varb=newExt.Button({
  3. id:"show-btn",//定义按钮的ID
  4. text:"弹出按钮",//定义按钮的标题
  5. renderTo:document.body//将弹出按钮渲染到窗体上
  6. });
  7. varbutton=Ext.get('show-btn');
  8. varwin;
  9. button.on('click',function(){
  10. //创建TabPanel
  11. vartabs=newExt.TabPanel({
  12. region:'center',//border布局,将页面分成东,南,西,北,中五部分,这里表示TabPanel放在中间
  13. margins:'3330',
  14. activeTab:0,//当前选项卡是第1个(从0开始)
  15. defaults:{
  16. autoScroll:true
  17. },
  18. items:[{
  19. title:'BogusTab',
  20. html:"第一个Tab的内容."
  21. },{
  22. title:'AnotherTab',
  23. html:"我是另一个Tab"
  24. },{
  25. title:'ClosableTab',
  26. html:"这是一个可以关闭的Tab",
  27. closable:true//显示关闭按钮
  28. }]
  29. });
  30. //定义一个Panel
  31. varnav=newExt.Panel({
  32. title:'Navigation',
  33. region:'west',//放在西边,即左侧
  34. split:true,//设置为分割
  35. width:200,
  36. collapsible:true,//允许伸缩
  37. margins:'3033',
  38. cmargins:'3333'
  39. });
  40. //如果窗口第一次被打开时才创建
  41. if(!win){
  42. win=newExt.Window({
  43. title:'LayoutWindow',
  44. closable:true,//显示关闭按钮
  45. width:600,
  46. height:350,
  47. border:false,
  48. plain:true,
  49. layout:'border',
  50. closeAction:'hide',
  51. items:[nav,tabs]//把上面创建的panel和TabPanel放在window中,并采用border方式布局
  52. });
  53. }
  54. win.show(button);
  55. });
  56. });
  57. });

----003----



五、card像安装向导一样,一张一张显示,布局由Ext.layout.CardLayout类定义,名称为card,该布局将会在容器组件中某一时刻使得只显示一个子元素。可以满足安装向导、Tab选项板等应用中面板显示的需求。看下面的代码:

例一:

Js代码收藏代码
  1. Ext.onReady(function(){
  2. varpanel=newExt.Panel({
  3. renderTo:"hello",
  4. title:"容器组件",
  5. width:300,
  6. height:200,
  7. layout:"card",
  8. activeItem:0,
  9. layoutConfig:{
  10. animate:true
  11. },
  12. items:[
  13. {title:"子元素1",html:"这是子元素1中的内容"},
  14. {title:"子元素2",html:"这是子元素2中的内容"},
  15. {title:"子元素3",html:"这是子元素3中的内容"}
  16. ],
  17. buttons:[{text:"切换",handler:changeTab}]
  18. });
  19. vari=1;
  20. functionchangeTab(){
  21. panel.getLayout().setActiveItem(i++);
  22. if(i>2)i=0;
  23. }
  24. });

上面的代码创建了一个容器组件面板,面板中包含三个子面板元素,父容器包含一个切换按钮,点击该按钮将会执行changeTab函数,该函数实现把父容器中的活动面板在三个子元素之间进行切换。程序的执行结果如下所示:004



点击一下切换按钮,结果如下图所示:005


例二:columnWidth来定义子元素所占的列宽度(注意columnWidth的总和应该为1)

Js代码收藏代码
  1. Ext.onReady(function(){
  2. newExt.Panel({
  3. renderTo:"hello",
  4. title:"容器组件",
  5. layout:"column",
  6. width:500,
  7. height:100,
  8. items:[{title:"列1",columnWidth:0.2},
  9. {title:"列2",columnWidth:0.3},
  10. {title:"列3",columnWidth:0.3},
  11. {title:"列4",columnWidth:0.2}
  12. ]
  13. });
  14. });


form是一种专门用于管理表单中输入字段的布局

Js代码收藏代码
  1. Ext.onReady(function(){
  2. varwin=newExt.Window({
  3. title:"formLayout",
  4. height:150,
  5. width:230,
  6. plain:true,
  7. bodyStyle:'padding:15px',
  8. items:{
  9. xtype:"form",
  10. labelWidth:30,
  11. defaultType:"textfield",
  12. frame:true,
  13. items:[
  14. {
  15. fieldLabel:"姓名",
  16. name:"username",
  17. allowBlank:false//必填项(非空)
  18. },
  19. {
  20. fieldLabel:"呢称",
  21. name:"nickname"
  22. },
  23. {
  24. fieldLabel:"生日",
  25. xtype:'datefield',
  26. name:"birthday",
  27. width:127
  28. }
  29. ]
  30. }
  31. });
  32. win.show();
  33. });



fit一个子元素将充满整个容器(如果多个子元素则只有一个元素充满整个容器)

例一:



例二:如果容器组件中有多个子元素,则只会显示一个元素,如下面的代码:

Js代码收藏代码
  1. Ext.onReady(function(){
  2. newExt.Panel({
  3. renderTo:"hello",
  4. title:"容器组件",
  5. layout:"fit",
  6. width:500,
  7. height:100,
  8. items:[{title:"子元素1",html:"这是子元素1中的内容"},
  9. {title:"子元素2",html:"这是子元素2中的内容"}
  10. ]
  11. });
  12. });



例三:如果不使用布局Fit,代码如下:

Js代码收藏代码
  1. Ext.onReady(function(){
  2. newExt.Panel({
  3. renderTo:"hello",
  4. title:"容器组件",
  5. width:500,
  6. height:200,
  7. items:[{title:"子元素1",html:"这是子元素1中的内容"},
  8. {title:"子元素2",html:"这是子元素2中的内容"}
  9. ]
  10. });
  11. });




table按照普通表格的方法布局子元素,用layoutConfig:{columns:3},//将父容器分成3列

例一:

Js代码收藏代码
  1. Ext.onReady(function(){
  2. varpanel=newExt.Panel({
  3. renderTo:'hello',
  4. title:'容器组件',
  5. layout:'table',
  6. width:500,
  7. height:200,
  8. layoutConfig:{columns:3},//将父容器分成3列
  9. items:[
  10. {title:'元素1',html:'ssssssssss',rowspan:2,height:100},
  11. {title:'元素2',html:'dfffsddsdfsdf',colspan:2},
  12. {title:'元素3',html:'sdfsdfsdf'},
  13. {title:'元素4',html:''}
  14. ]
  15. });
  16. });





分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics