Extjs关于FormPanel布局

Extjs关于FormPanel布局

FormPanel有两种布局:form和column,form是纵向布局,column为横向布局。默认为后者。使用layout属性定义布局类型。对于一个复杂的布局表单,最重要的是正确分割,分割结果直接决定布局能否顺利实现。
如果不再使用默认布局,那么我们必须为每一个元素指定一种布局方式,另外,还必须遵循以下几点:
【1】落实到任何一个表单组件后,最后总是form布局
【2】defaultType属性不一定起作用,必须显式为每一个表单组件指定xtype或new出新对象
【3】在column布局中,通过columnWidth可以指定列所占宽度的百分比,如占50%宽度为.5。

剖析出一个合理的结构,像下面这样 

我们发现,布局其实是由行和列组件成,分成由左往右和由上往下两个方向,由左往右
叫column,由上往下叫form。

整个大的表单是form布局,从上往下放置了五个小布局,在这里我以行n标记,我们
以行1为例进行分析。行1从左往右有三个表单组件,所以是column布局,行1我们用结
构这样定义: 

layout: “column”, 
items:[{},{},{}] //items表示指定布局内的表单组件集合,在此有三个 
}

行1内其实还有三个form布局,因为每个布局中只有一个表单组件,所以看起来并不
那么明显,我们完全可以放置多个表单组件到布局中。每一个布局使用下面的结构定义: 

layout: “form”, 
items:[{}] //只有一个表单组件 
}

上面的两个结构最终要组装到一起: 

layout: “column”, 
items:[{ 
   layout: “form”, 
   items:[{}] 
},{ 
   layout: “form”, 
   items: [{}] 
},{ 
   layout: “form”, 
   items: [{}] 
}] 
}

实现上面的完整代码是:

Ext.onReady(function() {
    var form = new Ext.form.FormPanel({
       title : "灵活布局的表单",
       width : 650,
       autoHeight : true,
       frame : true,
       renderTo : "a",
       layout : "form", // 整个大的表单是form布局
       labelWidth : 65,
       labelAlign : "right",

items : [{ // 行1
        layout : "column", // 从左往右的布局
        items : [{
           columnWidth : .3, // 该列有整行中所占百分比
           layout : "form", // 从上往下的布局
           items : [{
              xtype : "textfield",
              fieldLabel : "姓",
              width : 120
             }]
          }, {
           columnWidth : .3,
           layout : "form",
           items : [{
              xtype : "textfield",
              fieldLabel : "名",
              width : 120
             }]
          }, {
           columnWidth : .3,
           layout : "form",
           items : [{
              xtype : "textfield",
              fieldLabel : "英文名",
              width : 120
             }]
          }]
       }, { // 行2
          layout : "column",
          items : [{
             columnWidth : .5,
             layout : "form",
             items : [{
                xtype : "textfield",
                fieldLabel : "座右铭1",
                width : 220
               }]
            }, {
             columnWidth : .5,
             layout : "form",
             items : [{
                xtype : "textfield",
                fieldLabel : "座右铭2",
                width : 220
               }]
            }]
         }, {// 行3
          layout : "form",
          items : [{
             xtype : "textfield",
             fieldLabel : "奖励",
             width : 500
            }, {
             xtype : "textfield",
             fieldLabel : "处罚",
             width : 500
            }]
         }, {// 行4
          layout : "column",
          items : [{
             layout : "form",
             columnWidth : 0.2,
             items : [{
                xtype : "textfield",
                fieldLabel : "电影最爱",
                width : 50
               }]
            }, {
             layout : "form",
             columnWidth : 0.2,
             items : [{
                xtype : "textfield",
                fieldLabel : "音乐最爱",
                width : 50
               }]
            }, {
             layout : "form",
             columnWidth : 0.2,
             items : [{
                xtype : "textfield",
                fieldLabel : "明星最爱",
                width : 50
               }]
            }, {
             layout : "form",
             columnWidth : 0.2,
             items : [{
                xtype : "textfield",
                fieldLabel : "运动最爱",
                width : 50
               }]
            }]
         }, {// 行5
          layout : "form",
          items : [{
             xtype : "htmleditor",
             fieldLabel : "获奖文章",
             enableLists : false,
             enableSourceEdit : false,
             height : 150
            }]
         }],
       buttonAlign : "center",
       buttons : [{
          text : "提交"
         }, {
          text : "重置"
         }]
      });
   });

时间: 2024-12-28 15:43:56

Extjs关于FormPanel布局的相关文章

【ExtJS】FormPanel 布局(二)

要达成在Ext.picker.Date组件中添加时间选择组件,首先得明确一个思路,在继承Ext.form.field.Date组件,并且添加一个时间选择功能. 第一步:明确扩展组件的步骤: 创建一个Ext.form.field.Date的扩展组件: 1.定义一个Ext.form.field.Date的子类My.DateTimeField Ext.define('My.DateTimeField',{ extend: 'Ext.form.field.Date' }); 2.重载Ext.panel.

【ExtJS】FormPanel 布局(一)

准备工作,布置一个最简单的Form,共5个组件,都为textfield. 1 Ext.onReady(function(){ 2 Ext.create('Ext.form.Panel', { 3 width: 500, 4 title: 'Layout', 5 renderTo : 'form', 6 items: [{ 7 xtype : 'textfield', 8 fieldLabel : 'edit1', 9 name : 'edit1', 10 },{ 11 xtype : 'text

ExtJs FormPanel布局

FormPanel有两种布局:form和column,form是纵向布局,column为横向布局.默认为后者.使用layout属性定义布局类型.对于一个复杂的布局表单,最重要的是正确分割,分割结果直接决定布局能否顺利实现.如果不再使用默认布局,那么我们必须为每一个元素指定一种布局方式,另外,还必须遵循以下几点:[1]落实到任何一个表单组件后,最后总是form布局[2]defaultType属性不一定起作用,必须显式为每一个表单组件指定xtype或new出新对象[3]在column布局中,通过co

【ExtJS】简单布局应用

前几天学习了ExtJS的各种布局后,以下就是各种实践,从简单做起. 实现目的: 一个提交表单页,一个显示信息页,表单为个人基本资料输入,显示页为基本信息展示. 内容: 总体布局为border布局,展示页为west,提交表单为center.展示页可折叠,默认为折叠状态. 1.展示页用一个panel展示.可折叠,默认为折叠状态.点击提交后展示,点击关闭后关闭. 1 var show = Ext.create('Ext.panel.Panel',{ 2 region: 'west', 3 title:

Extjs 之dataview布局

有时候系统菜单用tree布局会显得单调内容少,这适合可以考虑DataView布局 Ext.define('MyApp.view.ReportRecord.window.ReportRecordWin', { extend : "Ext.window.Window", alias : 'widget.reportrecordwin', width : 1000, height : 510, autoScroll : true, modal : true, // bodyPadding :

extjs的window布局

Ext.onReady(function () { var win = new Ext.Window({ title: "个人资料", width: 500, height: 320, plain: true, layout: "form", defaultType: "textfield", labelWidth: 45, bodyStyle: "padding-top: 10px; padding-left:10px;",

extjs4.1.1 formPanel 布局

我们先来看看前台JS: Ext.onReady(function() { Ext.QuickTips.init();// 浮动信息提示 Ext.form.Field.prototype.msgTarget = 'side';// 设置控件的错误信息显示位置,主要可选的位置有:qtip,title,under,side,[elementId] Ext.BLANK_IMAGE_URL = 'resources/images/default/s.gif';// 替换图片文件地址为本地 var simp

【ExtJS】 FormPanel与ComboBox的集成以及值的获取

var formPanel = Ext.create("Ext.form.Panel",{ title : 'formPanel', width : 400, url : 'asd.php' //默认通过Ajax提交到这个url layout : 'anchor', //布局占满整个宽度 defaults : { anchor : '100%' }, items :[{ xtype : 'textfield', //文本编辑 fieldLabel : 'FirstName', name

【ExtJS】FormPanel表单验证

在Extjs中,FormPane表单提供了各种各样的验证. 在表单验证前需要在onReady的function({})内添加以下代码: Ext.QuickTips.init();    //为组件提供提示信息功能,form的主要提示信息就是客户端验证的错误信息. 出现错误提醒有两种方法: 1.Ext.form.Field.prototype.msgTarget='side';         //在onReady的function({})内添加 2.msgTarget : 'side' //在f