hn2002 发表于 2013-2-7 15:07:48

form和column:extJS的布局

对于一个容器组件,比如Ext.FormPanel,其内部空间无非是按照横向或纵向划分;如果需要更复杂的布局方式,就对第一次划分得到的子区域进行再划分。
form的含义是把容器按照横向划分,划分得到的行数与容器内的子元素(直接子元素,而不包含子元素内部的元素)个数相同,每个元素占一行;
column的含义是把容器按照纵向划分,划分得到的列数同上。
下面看看如何使用form和column
比如让我们实现一个登录的界面:
varlogin=newExt.FormPanel({ 
   labelAlign:'top',
   frame:true,
   title:'Login',
   id:'login',
   bodyStyle:'padding:5px 5px 0',
   width:400,
   items:[{
       layout:'column', //把整个空间划分成两列
       items:[{
           html:'<img src="loginLogo.png" />' //左边列放一个logo
       },{
           columnWidth:.5,
           layout:'form',//右边列再分成上下两行
           items:[{
               xtype:'textfield',
               fieldLabel:'Username',//第一行是用户名输入框
               name:'name',
                 id:'name',
               anchor:'100%'
           },{
               xtype:'textfield', 
               fieldLabel:'Password',//第二行是密码输入框
               name:'pass',
               id:'pass',
               anchor:'100%',
               inputType:'password'
           }]
       }]
   }],
   buttons:[{
       text:'OK',   //用户名密码确认按钮
       handler:function(){               
           var name=Ext.get('name').dom.value;
           var pass=Ext.get('pass').dom.value;
           if(name=='good'&&pass=='good'){
               //login correct, do something
           }else{
               Ext.MessageBox.alert('Warning!','Incorrect Login');
           }
                           
       },{
       text:'Reset', //用户名密码重置按钮
       handler:function(){
           Ext.get('name').dom.value='';
           Ext.get('pass').dom.value='';
       }
   }]
});
login.render(document.body);
login.getEl().center();
这段代码中,第8行至第30行与本文的主题“布局”相关。这几行代码把一个FormPanel分成两列,左边放一个图片logo;右列再被细分为上下两行,上面一行为用户名输入框,下面一行为密码输入框。这样一个简单的例子已经展示了布局的嵌套,以此递归地嵌套下去,就可以创建出非常复杂的布局方式。但是切记,网页是越简单越好。
从第31行开始,是为了这段login代码的完整性,加入了用于事件响应的按钮(buttons)。
最后两行代码的含义是把该登录界面显示出来,并居中。
页: [1]
查看完整版本: form和column:extJS的布局