(1) 一行定义一个CoulumnLayout,每列中只有一个控件的定义方法
该方法是最笨的方法,但是却是最实用的方法,也是笔者强烈推荐的方法。
为什么说该方法笨呢?请先看以下源代码:
Ext.onReady(function(){ var frm = new Ext.form.FormPanel({ applyTo: "form1", autoHeight: true, width: 750, frame: true, labelWidth:80, labelSeparator:":", title:'一行定义一个CoulumnLayout,每列中只有一个控件', items:[ //第一行 {layout:'column',border:false,items:[ //第一列 {columnWidth:.3,layout: 'form',border:false,items: [ {xtype:'textfield',fieldLabel:'一行一列',name:'text1-1-1',anchor:'90%'} ]}, //第二列 {columnWidth:.3,layout: 'form',border:false,items: [ {xtype:'textfield',fieldLabel:'一行二列',name:'text1-1-2',anchor:'90%'} ]}, //第三列 {columnWidth:.3,layout: 'form',border:false,items: [ {xtype:'textfield',fieldLabel:'一行三列',name:'text1-1-3',anchor:'90%'} ]} ]}, //第二行 {layout:'column',border:false,items:[ //第一列 {columnWidth:.3,layout: 'form',border:false,items: [ {xtype:'textfield',fieldLabel:'二行一列',name:'text1-2-1',anchor:'90%'} ]}, //第二列 {columnWidth:.3,layout: 'form',border:false,items: [ {xtype:'textfield',fieldLabel:'二行二列',name:'text1-2-2',anchor:'90%'} ]} ]}, //第三行 {layout:'column',border:false,items:[ //第一列 {columnWidth:.25,layout: 'form',border:false,items: [ {xtype:'checkbox',fieldLabel:'三行一列',boxLabel:'三行一列',name:'text1-3-1',anchor:'90%'} ]}, //第二列 {columnWidth:.15,layout: 'form',border:false,items: [ {xtype:'checkbox',hideLabel:true,boxLabel:'三行二列',name:'text1-3-2',anchor:'90%'} ]}, //第三列 {columnWidth:.15,layout: 'form',border:false,items: [ {xtype:'checkbox',hideLabel:true,boxLabel:'三行三列',name:'text1-3-3',anchor:'90%'} ]} ]} ] });
看出该方法如何笨了吧?就是每定义一行就要重新定义一个CoulumnLayout
而且每行中的每列只定义一个控件:
{columnWidth:.3,layout: 'form',border:false,items: [ {xtype:'textfield',fieldLabel:'一行一列',name:'text1-1-1',anchor:'90%'} ]},
这样不是要写多很多代码?确实够笨的。不过笔者认为笨不要紧,关键是能解决大问题。每行定义一个CoulumnLayout, 行与行之间相互独立起来,就不会互相影响了,尤其是定义第三行这样需要紧凑结构,不规则的行尤其适合。这样还有一个好处就是可以减少计算columnWidth的时间与配置tabIndex的问题。尤其是在已经有很多控件,要在中间中插入一个新的控件时,你会觉得还是该方法挺实用的