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

Ext 2.0布局实例

阅读更多

在《Ext2.0布局类初探》一文我简单的分析了一下Ext 2.0的布局类,但是缺乏例子。本篇文章的目的就是为《Ext2.0布局类初探》一文作补充,写几个简单的例子,希望大家能从中加深布局类的认识。因为没有API,对Ext2.0布局类也是一知半解,难免会有错误,请大家见谅!

<!--[if !supportLists]-->一、<!--[endif]-->简单的例子

这个例子和《Ext布局类的介绍与使用》(下称Ext文)的例子是一样的,大家可以通过两个例子对比一下2.0版的和1.1版的区别,整体布局图如下:

<!--[if gte vml 1]><v:shapetype id="_x0000_t75" coordsize="21600,21600"
   o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f"
   stroked="f">
   <v:stroke joinstyle="miter" />
   <v:formulas>
    <v:f eqn="if lineDrawn pixelLineWidth 0" />
    <v:f eqn="sum @0 1 0" />
    <v:f eqn="sum 0 0 @1" />
    <v:f eqn="prod @2 1 2" />
    <v:f eqn="prod @3 21600 pixelWidth" />
    <v:f eqn="prod @3 21600 pixelHeight" />
    <v:f eqn="sum @0 0 1" />
    <v:f eqn="prod @6 1 2" />
    <v:f eqn="prod @7 21600 pixelWidth" />
    <v:f eqn="sum @8 21600 0" />
    <v:f eqn="prod @7 21600 pixelHeight" />
    <v:f eqn="sum @10 21600 0" />
   </v:formulas>
   <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect" />
   <o:lock v:ext="edit" aspectratio="t" />
  </v:shapetype><v:shape id="_x0000_i1025" type="#_x0000_t75" style='width:415.5pt;
   height:311.25pt'>
   <v:imagedata src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\05\clip_image001.jpg"
    o:title="simple-layout" />
  </v:shape><![endif]--><!--[if !vml]--><!--[endif]-->

Ext文一样,我们先写好几个DIV

<div id="north-div"></div>

<div id="center-div">内容</div>

<div id="south-div">状态栏</div>

Ext文一样,没什么改变。

因为是对整个页面做布局的,所以需要使用Viewport类,而不是象1.1那样定义一个borderlayout,然后把document.body作为其容器。我们先创建一个Viewpot类:

var viewport = new Ext.Viewport({

layout:'border',

items:[

]

});

Viewprot类的创建很简单,只要定义一下布局的类型就行了,这里使用的是borderLayoutitems就是我们需要定义布局和面板的地方。

我们首先加入north区域的面板定义(toolbar的定义我就不写了,和Ext文是一样的):

var viewport = new Ext.Viewport({

layout:'border',

items:[

{

border:false,

region:'north',

contentEl:'north-div',

tbar:tb,

height:26

}

]

});

在定义里,region属性指定了布局区域为north。因为borderLayout是有边的,而这里并不需要边,所以要设置border属性为false。面板的容器元件是idnorth-divDIV,所以contentEl设置“north-div”。这里设置了顶部工具栏(tbar)为定义好的tb。区域的高度是26

在这里也可以使用Ext. BoxComponent代替borderLayout,好处嘛,我也说不上。如果用BoxComponent,需要修改几个地方,第一个地方是修改HTML

<div id="north-div"><div id="toolbar-div"></div></div>

需要为工具栏增加一个div,因为BoxComponent里使用的是el属性指定它的容器,而不是用contentEl属性指定它的内容面板,所以要在容器里加一个工具栏的容器。完整代码如下:

new Ext.BoxComponent({

region:'north',

el:'north-div',

tbar:tb,

height:26

})

因为BoxComponent是没有边的容器,所以不用设置它的border属性。还有一个变动的地方就是el代替了contentEl,原因是el属性指定的divBoxComponent的容器,而panelcontentEl指定的是面板容器。

我们继续写center区域的代码:

new Ext.TabPanel({

region:'center',

deferredRender:false,

activeTab:0,

items:[{

contentEl:'center-div',

title: '内容',

closable:true,

autoScroll:true

}]

})

因为center区域使用电话tab面板,不是用默认的panel面板,所以要创建一个TabPanelregion指定了区域位置是centerdeferredRender设置是否延缓面板的加载,这里设置是同时加载,activeTab设置了当前活动的tab页是第1页,这个一定要设置,不然内容页面会显示为空白。在items里定义了一个tab页,它的内容面板使用了预先写好的idcenter-divdiv元件。注意这里定义的也是内容面板,不是布局的容器。其它的属性和1.1版的tabPanel是一样的,因此属性说明可参考1.1版的API,这里我就不详细说明了。

最后是完成south区域了:

{

region:'south',

contentEl:'south-div',

height:28,

margins:'0 0 0 0'

}

在这里没什么特别的地方,只是将外补丁设置为0了。在这里也可以用BoxComponent代替,好处是背景色会和tab标签页头的背景一样,不用自己再设置。面板的默认背景色是白色,自己还要做相应的设置。

从代码中可以看到,新的写法不再需要:

layout.beginUpdate();

layout.restoreState();

layout.endUpdate();

这样的好处就是使代码更加清晰明了,不会遗漏代码,尤其是当内部布局再划分的时候。

例子的完整代码如下:

Ext.onReady(function(){

var tb=new Ext.Toolbar('north-div');//创建一个工具条

tb.add(new Ext.Toolbar.SplitButton({

text: '文件',

cls: 'x-btn-text-icon blist',

menu : {items: [

{text: '新建', handler: onItemClick},

{text: '保存', handler: onItemClick},

{text: '加载', handler: onItemClick}

]}}),

new Ext.Toolbar.MenuButton({

text: '编辑',

cls: 'x-btn-text-icon blist',

menu : {items: [

{text: '复制', handler: onItemClick},

{text: '粘贴', handler: onItemClick}

]}})

);

var viewport = new Ext.Viewport({

layout:'border',

items:[

{

border:false,

region:'north',

contentEl:'north-div',

tbar:tb,

height:26

},

new Ext.TabPanel({

region:'center',

deferredRender:false,

activeTab:0,

items:[{

contentEl:'center-div',

title: '内容',

closable:true,

autoScroll:true

}]

}),

{

region:'south',

contentEl:'south-div',

height:28,

margins:'0 0 0 0'

}

]

});

function onItemClick(item){

alert(item.text);

}

})

最终效果图:
<!--[if gte vml 1]><v:shape id="_x0000_i1026" type="#_x0000_t75"
   style='width:414.75pt;height:181.5pt'>
   <v:imagedata src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\05\clip_image003.jpg"
    o:title="2" />
  </v:shape><![endif]--><!--[if !vml]--><!--[endif]-->

<!--[if !supportLists]-->二、<!--[endif]-->带内部布局的例子

Ext文第二个例子布局一样:
<!--[if gte vml 1]><v:shape id="_x0000_i1027" type="#_x0000_t75"
   style='width:415.5pt;height:311.25pt'>
   <v:imagedata src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\05\clip_image005.jpg"
    o:title="layout-nested" />
  </v:shape><![endif]--><!--[if !vml]--><!--[endif]-->

第一步还是根据布局写好html代码:

<div id="north-div"><div id='toolbar-div'></div></div>

<div id="west-div"></div>

<div id='center-center'></div>

<div id='center-south'></div>

<div id="south-div">状态栏</div>

这次north区域我们尝试使用BoxComponent

new Ext.BoxComponent({

region:'north',

el:'north-div',

tbar:tb,

height:26

})

这里的代码在简单的例子已经介绍过了我就不多说了。下面然后开始写west区域定义。因为west区域是一个树列表,用到treePanel,需要一个根节点,所以在viewport前代码前先加入根节点:

var root = new Ext.tree.TreeNode({

text: '文件夹',

allowDrag:false,

allowDrop:false

});

root.appendChild(

new Ext.tree.TreeNode({text:'收件箱',allowDrag:false}),

new Ext.tree.TreeNode({text:'发件箱',allowDrag:false}),

new Ext.tree.TreeNode({text:'联系人',allowDrag:false}),

new Ext.tree.TreeNode({text:'已删除的邮件',allowDrag:false})

);

当然了,这个你也可以在界面完成后通过节点操作再加。
我们现在可以写west区域的定义了:

new Ext.tree.TreePanel({

region:'west',

contentEl:'west-div',

title:'树列表',

split:true,

width: 200,

minSize: 175,

maxSize: 400,

collapsible: true,

margins:'0 0 0 0',

root:root

})

这里比较特别的地方就是用TreePanel代替了默认的panel,设置了一个根节点root为先前定义的“root”变量。
Ext文对比一下,是不是简单了很多?不用在布局容器里再定义一个div来放置树了,省去了树的创建代码。
下面来定义center区域:

{

region:'center',

layout:'border',

items:[

new Ext.grid.GridPanel({

region:'center',

el:'center-center',

title:'条目列表',

ds: ds,

cm: colModel,

autoScroll: true

}),

{

region:'south',

contentEl:'center-south',

title:'内容',

split:true,

collapsible:true,

titlebar:true,

height:200,

minSize: 100,

maxSize:400,

collapsedTitle:'内容'

}

]

}

从代码中可以看到,我们不指定在html代码中定义的div作为它的内容面板,它自己会去创建。我们只需要定义它的区域位置(region)为center。这里有一个很重要的定义,就是layout属性了,这里的属性值为“border”,意思就是其内部布局的划分是使用borderlayout作为布局的。
然后我们在items中划分两个布局,一个是center区域的表格,和south区域的内容显示面板。
因为需要显示表格,所以直接创建了一个GridPanel作为center区域的面板。它的属性定义和1.1版的没有太大区别。在这里只需要说明该区域的位置(center)和它的容器(el)是我们定义好的it为“center-center”的div。内部south区域的定义也没什么特殊的地方,这里就不一一说明了。
最后我们加入整体布局south区域的定义就完成了我们这里例子。这里south也采用BoxComponent,而不采用panel

new Ext.BoxComponent({

region:'south',

el:'south-div',

height:24

})

例子的完整代码:

Ext.onReady(function(){

var tb=new Ext.Toolbar('toolbar-div');//创建一个工具条

tb.add(new Ext.Toolbar.SplitButton({

text: '文件',

cls: 'x-btn-text-icon blist',

menu : {items: [

{text: '新建', handler: onItemClick},

{text: '保存', handler: onItemClick},

{text: '加载', handler: onItemClick}

]}}),

new Ext.Toolbar.MenuButton({

text: '编辑',

cls: 'x-btn-text-icon blist',

menu : {items: [

{text: '复制', handler: onItemClick},

{text: '粘贴', handler: onItemClick}

]}})

);

var root = new Ext.tree.TreeNode({

text: '文件夹',

allowDrag:false,

allowDrop:false

});

root.appendChild(

new Ext.tree.TreeNode({text:'收件箱',allowDrag:false}),

new Ext.tree.TreeNode({text:'发件箱',allowDrag:false}),

new Ext.tree.TreeNode({text:'联系人',allowDrag:false}),

new Ext.tree.TreeNode({text:'已删除的邮件',allowDrag:false})

);

var myData = [

['张三','测试','<chsdate w:st="on" isrocdate="False" islunardate="False" day="1" month="1" year="2006">2006-1-1</chsdate>'],

['李四','测试一','<chsdate w:st="on" isrocdate="False" islunardate="False" day="6" month="5" year="2006">2006-5-6</chsdate>'],

['王五','测试二','<chsdate w:st="on" isrocdate="False" islunardate="False" day="1" month="12" year="2007">2007-12-1</chsdate>'],

['刘六','测试三','<chsdate w:st="on" isrocdate="False" islunardate="False" day="1" month="12" year="2006">2006-12-1</chsdate>'],

['张三','测试四','<chsdate w:st="on" isrocdate="False" islunardate="False" day="1" month="6" year="2007">2007-6-1</chsdate>'],

['李四','测试五','<chsdate w:st="on" isrocdate="False" islunardate="False" day="1" month="7" year="2007">2007-7-1</chsdate>'],

['刘六','测试六','<chsdate w:st="on" isrocdate="False" islunardate="False" day="1" month="8" year="2007">2007-8-1</chsdate>'],

['张三','测试七','<chsdate w:st="on" isrocdate="False" islunardate="False" day="1" month="9" year="2007">2007-9-1</chsdate>'],

['李四','测试八','<chsdate w:st="on" isrocdate="False" islunardate="False" day="1" month="10" year="2007">2007-10-1</chsdate>'],

['王五','测试九','<chsdate w:st="on" isrocdate="False" islunardate="False" day="1" month="11" year="2007">2007-11-1</chsdate>'],

['刘六','测试六','<chsdate w:st="on" isrocdate="False" islunardate="False" day="1" month="8" year="2007">2007-8-1</chsdate>'],

['张三','测试七','<chsdate w:st="on" isrocdate="False" islunardate="False" day="1" month="9" year="2007">2007-9-1</chsdate>'],

['李四','测试八','<chsdate w:st="on" isrocdate="False" islunardate="False" day="1" month="10" year="2007">2007-10-1</chsdate>'],

['王五','测试九','<chsdate w:st="on" isrocdate="False" islunardate="False" day="1" month="11" year="2007">2007-11-1</chsdate>'],

['刘六','测试十','<chsdate w:st="on" isrocdate="False" islunardate="False" day="1" month="8" year="2007">2007-8-1</chsdate>'],

['张三','测试十一','<chsdate w:st="on" isrocdate="False" islunardate="False" day="1" month="9" year="2007">2007-9-1</chsdate>'],

['李四','测试十二','<chsdate w:st="on" isrocdate="False" islunardate="False" day="1" month="10" year="2007">2007-10-1</chsdate>'],

['王五','测试十三','<chsdate w:st="on" isrocdate="False" islunardate="False" day="1" month="11" year="2007">2007-11-1</chsdate>'],

['刘六','测试十四','<chsdate w:st="on" isrocdate="False" islunardate="False" day="1" month="8" year="2007">2007-8-1</chsdate>'],

['张三','测试十五','<chsdate w:st="on" isrocdate="False" islunardate="False" day="1" month="9" year="2007">2007-9-1</chsdate>'],

['李四','测试十六','<chsdate w:st="on" isrocdate="False" islunardate="False" day="1" month="10" year="2007">2007-10-1</chsdate>'],

['王五','测试十七','<chsdate w:st="on" isrocdate="False" islunardate="False" day="1" month="11" year="2007">2007-11-1</chsdate>'],

['刘六','测试十八','<chsdate w:st="on" isrocdate="False" islunardate="False" day="1" month="8" year="2007">2007-8-1</chsdate>']

];

var ds = new Ext.data.Store({

proxy: new Ext.data.MemoryProxy(myData),

reader: new Ext.data.ArrayReader({}, [

{name:'sender'},

{name:'title'},

{name:'sendtime'}

])

});

ds.load();

var colModel = new Ext.grid.ColumnModel([

{header:'发送人',width:100,sortable:true,dataIndex:'sender'},

{id:'title',header:'标题', width:100,sortable:true,dataIndex:'title'},

{header:'发送时间',width:75,sortable:true,dataIndex:'sendtime'}

]);

var viewport = new Ext.Viewport({

layout:'border',

items:[

new Ext.BoxComponent({

region:'north',

el:'north-div',

tbar:tb,

height:26

}),

new Ext.tree.TreePanel({

region:'west',

contentEl:'west-div',

title:'树列表',

split:true,

width: 200,

minSize: 175,

maxSize: 400,

collapsible: true,

margins:'0 0 0 0',

root:root

}),

{

region:'center',

layout:'border',

items:[

new Ext.grid.GridPanel({

region:'center',

el:'center-center',

title:'条目列表',

ds: ds,

cm: colModel,

autoScroll: true

}),

{

region:'south',

contentEl:'center-south',

title:'内容',

split:true,

collapsible:true,

titlebar:true,

height:200,

minSize: 100,

maxSize:400,

collapsedTitle:'内容'

}

]

},

new Ext.BoxComponent({

<p class=
分享到:
评论

相关推荐

    Ext 2.0布局实例的例程

    Ext 2.0布局实例的例程

    EXT2.0 GRID 示例

    EXT2.0 GRID 示例是一个基于EXT JavaScript库的高级数据展示和操作组件的实例。EXT是一个强大的前端开发框架,尤其在创建交互式Web应用程序方面表现出色。EXT2.0是EXT库的一个早期版本,它提供了丰富的用户界面组件...

    Ext2.0 form使用实例的例程

    在这个“Ext2.0 form使用实例的例程”中,我们将深入探讨Ext 2.0的表单(form)组件及其应用。 表单在任何应用程序中都扮演着至关重要的角色,用于收集和验证用户输入的数据。Ext 2.0的表单组件提供了一整套完整的...

    ext2.0官方文档(chm),Ext 2.0 简明教程,Ext2经典应用

    3. **EXT2.0中文教程.exe**: 这可能是一个以可执行文件(.exe)形式的中文教学程序,对于中文用户来说非常友好。它可能包含了视频教程、交互式示例或者图文并茂的讲解,帮助学习者更直观地理解Ext 2.0的用法和功能。...

    Ext2.0教程与实例 开发与实践笔记

    这个教程和实例集主要涵盖了Ext2.0的基础知识、开发技巧以及实践应用,旨在帮助开发者快速掌握这一技术。 首先,让我们关注"Ext2.0的入门小实例"。这个部分可能包括了创建基本的用户界面元素,如窗口(Windows)、...

    EXT2.0学习资料

    "ExtJS学习.pdf"文档很可能包含了EXT2.0的基本概念、API使用、组件实例、布局管理、事件处理等方面的详细教程。阅读这份文档,可以帮助我们掌握EXT2.0的使用方法,理解如何创建和配置组件,以及如何通过布局管理器...

    ext2.0中文帮助文档

    3. **API文档**:提供EXT2.0所有类的详细API说明,包括构造函数、静态方法、实例方法等。 4. **布局与容器**:讲解EXT2.0的布局系统,如何配置和使用不同的布局,以及容器组件的使用。 5. **数据绑定**:阐述数据...

    ext2.0 经典PDF合集(入门到专精)

    EXT经典.pdf这本书可能是EXT2.0的基础教程,涵盖了EXT2.0的基本组件、布局管理、数据绑定、事件处理等方面,让读者能够了解EXT2.0的核心框架和工作原理。在EXT2.0中,组件是构建用户界面的基本元素,包括面板、表格...

    EXT2.0学习资料.rar

    ExtJS学习.pdf则可能是另一个EXT JS的学习资料,可能包含EXT2.0的技术详解、实例演示、最佳实践等内容。用户可以从中了解到如何使用EXT2.0的API来创建自定义组件,以及如何与其他前端技术如jQuery、Ajax等进行集成。...

    ext 2.0 form demo

    这个演示可能包括了各种表单元素的实例,如文本输入、选择框、日期选择器等,展示了EXT 2.0的灵活性和易用性。 总结,EXT 2.0 Form Demo是一个学习EXT如何构建高效、交互性好、功能强大的表单的好资源。通过深入...

    ext 2.0

    1. **布局管理器**:EXT 2.0 提供了多种布局模式,如“Fit”布局、“Border”布局、“Form”布局等,使得开发者能够轻松地调整组件在容器中的位置和大小。 2. **数据绑定**:EXT 2.0 引入了强大的数据绑定机制,...

    Ext2.0 form使用实例

    Ext2.0 Form 使用实例详解 在Web应用开发中,ExtJS库提供了强大的用户界面组件,其中FormPanel是用于创建复杂表单的重要组件。本文将详细介绍Ext2.0 FormPanel的使用,包括创建方法、控件配置以及布局管理。 首先...

    ext2.0入门教程

    3. **布局管理**:EXT2.0有多种内置的布局方式,如Fit、Border、Table、Form等,用于管理组件在容器中的排列和大小调整,使得你可以灵活地设计界面布局。 4. **数据绑定**:EXT2.0支持数据绑定,能够将UI组件与数据...

    《Ext 2.0 核心API 详解教程》 pdf

    5. **布局(Layouts)**:EXT 2.0支持多种布局模式,如表格布局(Table Layout)、绝对布局(Absolute Layout)、流式布局(Form Layout)等,使得组件能够在容器中灵活排列和调整大小。 6. **组件(Components)**...

    Ext2.0的学习笔记

    在Ext2.0中,每个页面只能有一个`ViewPort`实例,这通常作为应用程序的根容器,用来组织和布局所有的UI组件。通过使用`ViewPort`,开发者可以轻松地创建响应式设计,确保Web应用在不同设备和屏幕尺寸上都能正常工作...

    ext2.0(dateTimeField)

    在实际应用中,使用`ext2.0 dateTimeField`时,开发者需要确保正确引用了这些资源文件,并在代码中实例化`dateTimeField`组件。通常会涉及到以下步骤: 1. 引入`ext2.0`的库文件,如`ext-all.js`,以及上述提到的`...

    GWT-EXT2.0最佳实践教程,源代码打包供下载

    《GWT-EXT2.0最佳实践教程》源代码打包下载资源主要涵盖了Google Web Toolkit (GWT) 和EXT-JS 2.0的结合使用,提供了丰富的实践案例和示例代码,旨在帮助开发者深入理解和应用这两项技术。GWT是一款强大的JavaScript...

    ext2.0show程序展示

    EXT2.0Show程序的设计目的是帮助用户理解和分析EXT2文件系统的结构和数据布局,这对于系统管理员、开发者以及对Linux内核感兴趣的个人来说是非常有价值的。 EXT2文件系统的核心特性包括: 1. **日志式文件系统**: ...

    EXTjs2.0 教程 包括《EXT2.0简明教程》和《ext基础教程》两份教材

    《EXT2.0简明教程》以CHM(Compiled Help Manual)格式提供,通常包含详尽的API文档和实例代码,帮助开发者快速掌握EXT2.0的主要组件和功能。而《ext基础教程》以DOC格式呈现,可能侧重于讲解EXTjs的基本用法和设计...

Global site tag (gtag.js) - Google Analytics