文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Ext.js4.2.1中Ext.container.Container怎么用

2023-06-04 11:56

关注

小编给大家分享一下Ext.js4.2.1中Ext.container.Container怎么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

一:简介

任何包含其它组件的组件的基类,容器最基本的操作包括对其内部组件进行添加,插入和删除。

最常用的容器类包含Ext.panel.Panel,Ext.window.Window,和Ext.tab.Panel.

可以简单的创建一个容器:

  1. // 显式创建一个容器

  2. Ext.create('Ext.container.Container', {

  3.     layout: {

  4.         type: 'hbox'

  5.     },

  6.     width: 400,

  7.     renderTo: Ext.getBody(),

  8.     border: 1,

  9.     style: {borderColor:'#000000', borderStyle:'solid', borderWidth:'1px'},

  10.     defaults: {

  11.         labelWidth: 80,

  12.         // 隐式创建容器通过指定的xtype

  13.         xtype: 'datefield',

  14.         flex: 1,

  15.         style: {

  16.             padding: '10px'

  17.         }

  18.     },

  19.     items: [{

  20.         xtype: 'datefield',

  21.         name: 'startDate',

  22.         fieldLabel: 'Start date'

  23.     },{

  24.         xtype: 'datefield',

  25.         name: 'endDate',

  26.         fieldLabel: 'End date'

  27.     }]

  28. });


二:Layout

容器类把子组件的渲染任务赋予给了一个layout管理类,必须通过一个layout配置属性配置到容器当中。

当为容器添加子item或者动态的添加组件时,需要考虑如何组织他们的布局和大小。默认情况下,容器会按先后顺序进行布局。

某些容器允许动态的添加子组件,但是下面的这些容器却不允许:Ext.layout.container.Card,Ext.layout.container.Anchor,Ext.layout.container.VBox, Ext.layout.container.HBox,
和Ext.layout.container.Table。

layout枚举值:

1.absolute:  通过坐标位置来布局


点击(此处)折叠或打开

  1. Ext.create('Ext.panel.Panel',{

  2.             layout:'absolute',

  3.             title:'Ext.layout.container.Absolute布局示例',

  4.             frame:false,

  5.             height:150,

  6.      width:300,

  7.             renderTo:Ext.getBody(),

  8.             defaults:{

  9.                 frame:true,

  10.                 height:70,

  11.      width:100,

  12.                 bodyStyle:'background-color:#FFFFFF;padding:15px'//设置面板体的背景色

  13.             },

  14.             items:[{

  15.                 x:10,//横坐标为距父容器左边缘10像素的位置

  16.                 y:10,//纵坐标为距父容器上边缘10像素的位置

  17.                 html:'子面板一',

  18.                 title:'子面板一'

  19.             },{

  20.                 x:130,//横坐标为距父容器左边缘130像素的位置

  21.                 y:40,//纵坐标为距父容器上边缘40像素的位置

  22.                 html:'子面板二',

  23.                 title:'子面板二'

  24.             }]

  25.     

  26.         })


2.accorion: 折叠式布局,每次只能有一个展开


点击(此处)折叠或打开

  1. Ext.create("Ext.panel.Panel", {

  2.             title: "Ext.layout.container.Accordion示例",

  3.             frame: true,

  4.             width: 300,

  5.             height: 200,

  6.             renderTo: Ext.getBody(),

  7.             bodyPadding: 5,

  8.             layout: "accordion",

  9.             defaults: {

  10.                 bodyStyle: "background-color:#FFFFFF"

  11.             },

  12.             items: [{

  13.                 title: "嵌套面板一",

  14.                 html: "面板一"

  15.             }, {

  16.                 title: "嵌套面板二",

  17.                 html: "面板二"

  18.             }, {

  19.                 title: "嵌套面板三",

  20.                 html: "面板三"

  21.             }]

  22.         });

anchor: 根据容器的相对位置布局


点击(此处)折叠或打开

  1. Ext.create('Ext.Panel', {

  2.     width: 500,

  3.     height: 400,

  4.     title: "AnchorLayout Panel",

  5.     layout: 'anchor',

  6.     renderTo: Ext.getBody(),

  7.     items: [

  8.         {

  9.             xtype: 'panel',

  10.             title: '75% Width and 20% Height',

  11.             anchor: '75% 20%'

  12.         },

  13.         {

  14.             xtype: 'panel',

  15.             title: 'Offset -300 Width & -200 Height',

  16.             anchor: '-300 -200'

  17.         },

  18.         {

  19.             xtype: 'panel',

  20.             title: 'Mixed Offset and Percent',

  21.             anchor: '-250 20%'

  22.         }

  23.     ]

  24. });

auto: 未指定layout属性的容器默认的布局方式

点击(此处)折叠或打开

  1. Ext.create('Ext.Panel', {

  2.     width: 500,

  3.     height: 280,

  4.     title: "AutoLayout Panel",

  5.     layout: 'auto',

  6.     renderTo: document.body,

  7.     items: [{

  8.         xtype: 'panel',

  9.         title: 'Top Inner Panel',

  10.         width: '75%',

  11.         height: 90

  12.     },

  13.     {

  14.         xtype: 'panel',

  15.         title: 'Bottom Inner Panel',

  16.         width: '75%',

  17.         height: 90

  18.     }]

  19. });


5.border:这是一个支持多层嵌套面板,区域之间的自动形成一个多窗格,面向应用的UI布局风格内置的展开和折叠区域。布局将界面分为上下左右中五个区域,分别用north、south、west、east、center来表示,它的每个子项用region指定元素的位置。


点击(此处)折叠或打开

  1. Ext.create('Ext.panel.Panel', {

  2.          width: 500,

  3.             height: 300,

  4.             title: 'Border Layout',

  5.             layout: 'border',

  6.             defaults :{

  7.                 style : {borderStyle:'solid'}

  8.             },

  9.             items: [{

  10.                 title: 'South Region is resizable',

  11.                 region: 'south', // position for region

  12.                 xtype: 'panel',

  13.                 height: 100,

  14.                 split: true, // enable resizing

  15.                 margins: '0 5 5 5'

  16.             },{

  17.                 // xtype: 'panel' implied by default

  18.                 title: 'West Region is collapsible',

  19.                 region:'west',

  20.                 xtype: 'panel',

  21.                 margins: '5 0 0 5',

  22.          width: 200,

  23.                 collapsible: true, // make collapsible

  24.                 id: 'west-region-container',

  25.                 layout: 'fit'

  26.             },{

  27.                 title: 'Center Region',

  28.                 region: 'center', // center region is required, no width/height specified

  29.                 xtype: 'panel',

  30.                 layout: 'fit',

  31.                 margins: '5 5 0 0'

  32.             }],

  33.             renderTo: Ext.getBody()

  34.         })


6.box: HBox,VBox的基础类

7.card:这种布局管理多个子组件,每个装到集装箱,其中只有一个子组件可以在任何给定的时间是可见的。这种布局的样式是最常用的向导,标签的实现等


点击(此处)折叠或打开

  1. var p = Ext.create('Ext.panel.Panel', {

  2.             layout: 'card',

  3.             items: [

  4.                 { html: 'Card 1' },

  5.                 { html: 'Card 2' }

  6.          ],

  7.             renderTo: Ext.getBody()

  8.         });

  9.         p.getLayout().setActiveItem(0)

checkboxgroup: 该种布局的实现类为Ext.form.CheckboxGroup和Ext.form.RadioGroup


点击(此处)折叠或打开

  1. Ext.create('Ext.form.CheckboxGroup', {

  2.             id : 'myGroup',

  3.             xtype : 'checkboxgroup',

  4.             renderTo : Ext.getBody(),

  5.             fieldLabel : 'Single Column',

  6.             itemCls : 'x-check-group-alt',

  7.             columns : 3,

  8.             items : [ {

  9.                 boxLabel : '唱歌',

  10.                 name : '1'

  11.             }, {

  12.                 boxLabel : '游泳',

  13.                 name : '2',

  14.                 checked : true

  15.             }, {

  16.                 boxLabel : '看书',

  17.                 name : '3'

  18.             }, {

  19.                 boxLabel : '旅游',

  20.                 name : '4'

  21.             }, {

  22.                 boxLabel : '游戏',

  23.                 name : '5'

  24.             }, {

  25.                 boxLabel : '睡觉',

  26.                 name : '6'

  27.             } ]

  28.         })


9.把整个容器看成一列,然后向容器放入子元素


点击(此处)折叠或打开

  1. Ext.create('Ext.panel.Panel', {

  2.             title: 'Column Layout - Percentage Only',

  3.          width: 350,

  4.          height: 250,

  5.          layout:'column',

  6.             items: [{

  7.                 title: 'Column 1',

  8.                 columnWidth: 0.25

  9.          },{

  10.                 title: 'Column 2',

  11.                 columnWidth: 0.55

  12.          },{

  13.                 title: 'Column 3',

  14.                 columnWidth: 0.20

  15.          }],

  16.             renderTo: Ext.getBody()

  17.         });


10.container: 自定义布局的基础类

11.fit:Fit Layout 是很常用的一种布局,在Fit布局中,子元素将自动填满整个父容器。
如果在Fit 布局中放置了多个组件,则只会显示第一个子元素。典型的案例就是当客户要求一个window或panel中放置一个GRID组件,grid组件的大小会随着父容器的大小改变而改变。


点击(此处)折叠或打开

  1. Ext.create('Ext.panel.Panel', {

  2.             title: 'Fit Layout',

  3.          width: 300,

  4.          height: 150,

  5.          layout:'fit',

  6.             items: {

  7.                 title: 'Inner Panel',

  8.          html: 'This is the inner panel content',

  9.                 bodyPadding: 20,

  10.          border: false

  11.          },

  12.             renderTo: Ext.getBody()

  13.         });


12.form: 表单布局


点击(此处)折叠或打开

  1. Ext.create('Ext.Panel', {

  2.             width : 500,

  3.             height : 300,

  4.             title : "FormLayout Panel",

  5.             layout : 'form',

  6.             renderTo : Ext.getBody(),

  7.             bodyPadding : 5,

  8.             defaultType : 'textfield',

  9.             items : [ {

  10.                 fieldLabel : 'First Name',

  11.                 name : 'first',

  12.                 allowBlank : false

  13.             }, {

  14.                 fieldLabel : 'Last Name',

  15.                 name : 'last'

  16.             }, {

  17.                 fieldLabel : 'Company',

  18.                 name : 'company'

  19.             }, {

  20.                 fieldLabel : 'Email',

  21.                 name : 'email',

  22.                 vtype : 'email'

  23.             }, {

  24.                 fieldLabel : 'DOB',

  25.                 name : 'dob',

  26.                 xtype : 'datefield'

  27.             }, {

  28.                 fieldLabel : 'Age',

  29.                 name : 'age',

  30.                 xtype : 'numberfield',

  31.                 minValue : 0,

  32.                 maxValue : 100

  33.             }, {

  34.                 xtype : 'timefield',

  35.                 fieldLabel : 'Time',

  36.                 name : 'time',

  37.                 minValue : '8:00am',

  38.                 maxValue : '6:00pm'

  39.             } ],

  40.             renderTo : Ext.getBody()

  41.         });

hbox:横向排列跨越容器项目的布局。这种布局划分可选包含数字柔性配置的子项之间的可用的水平空间


点击(此处)折叠或打开

  1. Ext.create('Ext.Panel', {

  2.          width: 500,

  3.          height: 300,

  4.             title: "HBoxLayout Panel",

  5.          layout: {

  6.          type: 'hbox',

  7.                 align: 'stretch'

  8.          },

  9.             renderTo: document.body,

  10.             items: [{

  11.                 xtype: 'panel',

  12.                 title: 'Inner Panel One',

  13.                 flex: 2

  14.          },{

  15.                 xtype: 'panel',

  16.                 title: 'Inner Panel Two',

  17.                 flex: 1

  18.          },{

  19.                 xtype: 'panel',

  20.                 title: 'Inner Panel Three',

  21.                 flex: 1

  22.          }],

  23.             renderTo: btn10

  24.         });


14.table:Table Layout 将内容绘制在table标签中,table的列数可以指定,还可以通过设置rowSpan和colSpan来创建复杂的布局


点击(此处)折叠或打开

  1. Ext.create('Ext.panel.Panel', {

  2.             title: 'Table Layout',

  3.          width: 300,

  4.          height: 150,

  5.          layout: {

  6.          type: 'table',

  7.                 columns: 3

  8.          },

  9.             defaults: {

  10.                 bodyStyle: 'padding:20px;',

  11.                 borderStyle:'solid'

  12.          },

  13.             items: [{

  14.          html: 'Cell A content',

  15.                 rowspan: 2

  16.          },{

  17.          html: 'Cell B content',

  18.                 colspan: 2

  19.          },{

  20.          html: 'Cell C content',

  21.                 cellCls: 'highlight'

  22.          },{

  23.          html: 'Cell D content'

  24.          }],

  25.             renderTo: Ext.getBody()

  26.         });


15.vbox:以垂直的方式组织所有子元素。它的子元素可以通过align属性来设置对齐方式,vbox的对齐方式有:
left : 左对齐,默认对其方式
center : 中间对齐
right : 右对齐
stretch : 以父容器的宽度拉伸对齐
stretchmax : 以所有子元素中的最大宽度拉伸对齐


点击(此处)折叠或打开

  1. Ext.create('Ext.Panel', {

  2.          width: 500,

  3.          height: 400,

  4.             title: "VBoxLayout Panel",

  5.          layout: {

  6.          type: 'vbox',

  7.                 align: 'center'

  8.          },

  9.             renderTo: document.body,

  10.             items: [{

  11.                 xtype: 'panel',

  12.                 title: 'Inner Panel One',

  13.          width: 250,

  14.                 flex: 2

  15.          },

  16.          {

  17.                 xtype: 'panel',

  18.                 title: 'Inner Panel Two',

  19.          width: 250,

  20.                 flex: 4

  21.          },

  22.          {

  23.                 xtype: 'panel',

  24.                 title: 'Inner Panel Three',

  25.          width: '50%',

  26.                 flex: 4

  27.          }],

  28.             renderTo: btn9

  29.         });



三:Config

1.activeItem:String/Number(子组件id 或者是子组件所在容器的索引)


设置该属性的目的是设置那个子组件在最初显示的容器的布局上渲染. 如:activeItem: 'itemId-1' or activeItem: 0 (容器中的第一个子组件).


适用于一次只能显示一个item的布局样式,如Ext.layout.container.Card 或Ext.layout.container.Fit 


2.anchorSize


锚点的大小


3.autoDestory:Boolean


默认为true,表示自动销毁容器内的所有子组件


4.defaults


对所有通过add或insert添加的item设置统一的属性。


默认属性将会应用到所有的子组件上,但是不会覆盖子组件本身已经有的属性。


如:
用法:  
defaults: { // defaults 将会应用所有的子组件上,而不是父容器  
    autoScroll: true  
},  
items: [  
    // panel1 已经存在 autoScroll: false 所以 defaults将不会应用  
    {  
        xtype: 'panel',  
        id: 'panel1',  
        autoScroll: false  
    },  
    // panel2 将会 autoScroll: true  
    new Ext.panel.Panel({  
        id: 'panel2'  
    })  
]  


5.items


单个组件,或者是以数组形式定义的子组件集合 将会自动添加到容器中去


如果开发者没有配置layout属性, 默认是按顺序将子组件渲染到在容器中,


不考虑子组件的大小和定位。


如果子组件是指定的,它的实际组件的类型将根据xtype选项进行实例化. 每个组件都有各自的xtype.


如果没有指定 xtype, 那么将会使用 defaultType,默认是panel.


不要定义contentEl 或者 html作为子组件

以上是“Ext.js4.2.1中Ext.container.Container怎么用”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网行业资讯频道!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯