`
wangzhengji2006
  • 浏览: 23819 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Ext2.0布局类初步认识

    博客分类:
  • Ext
阅读更多

Ext2.0正式版虽然还没出来,但是官网上的例程还是令人兴奋不已。内存泄漏的问题应该是解决了,布局类更新了,增加了新的东西,grid的功能更加强大,tabs也增加了循环按钮,还增加了类似delphi action manager的action类,在反映速度上也有一定的提升,这些新功能确实很令人振奋,可惜正式版还没出来,API也还没出来,所以想立刻使用2.0版做开发的,会有一定的困难。本文的目的就是和大家一起探讨一下2.0版的布局类,希望在API没有出来之前对大家的开发有所帮助,还有就是希望大家提供一些反馈意见,以便完善这篇文章。多谢!

Ext2.0版的布局类,最大的改动是:
1、取消了内容面板contentPanel类,代替的是panel类的。在panel类中,会根据layout的定义不同自动生成布局样式,这样就不需要自己再去定义布局了,只要在panel定义中加入布局的定义就可以实现布局了。由panel类派生出formpanel、girdpanel、tabpanel、treepanel等子类,各子类中已根据自己的需要固定了不同的布局类型,例如在创建formpanel时会创建formlayout。
2、增加Container类,并派生出viewpoint类作为全局布局的接口。
3、取消了layoutManger类,增加了ContainerLayout类,而borderLayout类的父类也修改为ContainerLayout。
4、BasicLayoutRegion类也取消了,因此它的子类LayoutRegion以及LayoutRegion类的子类SplitLayoutRegion都取消了。代替的是在borderLayout类下增加了Region类和SplitRegion类。
5、在区域内再划分区域的NestedLayoutPanel类也根据框架的改变而取消了。至于如何再划分区域,请继续阅读本文。
6、增加了AccordianLayout、AnchorLayout、CardLayout、CoulmnLayout、FitLayout、FormLayout、TableLayout等新的类。
7、原有的用contentPanel可以做出的tab效果,现在则需要使用tabpanel实现。

随着类的继承关系的改变,布局的创建方法也做了很大的变动。我的看法是做这样大的框架的修改主要原因解决内存泄漏的问题。
我们先来了解一下新的布局类的继承关系:

 
从图中我们可以看出Layout类独立出来了,不再象1.1版那样继承自Observable类了。估计这样修改是未来避免内存泄漏的(猜的,水平有限,所以请多见谅)。

下面我们来看看各个类的情况:

1、Observable类
Observable类和1.1版的相同,没有修改,是一个抽象基类,为发布事件提供一个公共接口,其子类可通过addEvents方法增加事件。API可以直接参考1.1的API。

2、Component类
Component类和1.1版的相同,没有修改,是Ext组件的主要基类。API可以直接参考1.1的API。

3、BoxComponent类
BoxComponent类和1.1版的相同,没有改变,是需要使用盒子容器的可视化Ext组件的基类。API可以直接参考1.1的API。

4、Container类
Container类是新增加的一个基类。其主要作用是管理容器里的布局对象,负责布局对象的创建与摧毁。它通过一个JSON结构(Ext.Container.LAYOUTS={})来保存布局对象,通过layout属性值和items的JSON定义自动创建这些布局对象,并通过一个JSON结构记录这些布局对象,这样就可在面板对象生命周期内对其进行管理,防止布局中面板关闭时发生内存泄漏。Container类设置了布局中默认面板为panel,如果需要使用其它panel,则需要在items中进行定义。

5、Viewport类
Viewport类也是新增的一个类,是Container类的子类。Viewport类其实就是将页面body作为一个Ext对象,然后通过该对象管理body上的布局对象。Viewprot类的默认面板是panel面板,因为panel并没有指定特定的布局,所以要通过layout属性指定布局,并在items中定义的面板对象定义中加入该布局的定义。Layout属性可选的范围值为container、anchor、form、border、column、fit、accordion、card和table。

6、Panel类
Panel类是新增的面板基类。其基本的属性、方法和事件与1.1版的contentPanel相似,API可参考contentPanel的API。Panel类和contentPanel类最大的不同是可以根据layout属性自动生成相应的布局,而不是和1.1版那样定义布局,然后加入contentPanel对象。
在panel类中增加了一个很好的功能,就是工具栏定义不再是contentPanel的toolbar了,而是划分成了tbar和bbar,tbar就是top bar,在面板顶部的工具栏,babr是bottom bar,在面板底部的工具栏,这样就不用再为toolbar的位置犯难了,呵呵。
panel类也不再象contentPanel那样本身就是一个tab面板,如果需要tab方式的面板,则需要用到新的tabPanel来定义。

7、ContainerLayout类
ContainerLayout类是新增的一个容器布局类,是其它布局的类的基类,其作用主要是为子类提供基本的属性、方法和事件:monitorResize(是否检测窗口大小的改变)、activeItem(当前活动的对象)、layout(子布局的类型)、onLayout(显示布局事件)、isValidParent(是否有有效的父节点)、renderAll(输出内容)、renderItem(输出某个子对象)、onResize(大小改变时间)、setContainer(设置容器)和parseMargins(取消外补丁)。

8、BorderLayout类
BorderLayout类保持了1.1版的属性、事件和方法,只是其继承对象变成了ContainerLayout类。虽然其内部运作方法不同,但是还是可以根据1.1版的API去定义BorderLayout对象。

9、anchorLayout类和formLayout类
anchorLayout类是新增的类,它的源代码很简单,主要功能就是定义一个显示内容的空白区域。具体的应用看layout下的anchor.html文件看不出有什么特点,呵呵。
formLayout也是新增的类,继承于anchorLayout,主要是为formPanle服务,创建formPanel时创建该布局,主要属性为labelSeparator(标题分隔符)。

10、 ColumnLayout类
ColumnLayout类是新增的类,替代1.1版的Ext.form.Column。代码书写方式比以前更简单更方便。

11、 FitLayout类、Accordion类和CardLayout类

FitLayout也是新增的类,主要是创建一个适应容器大小的布局区域。没什么特殊的属性和方法。
Accordion类是FitLayoutd类的子类,主要是创建类似outlook bar的效果,这是一个令人相当兴奋的功能,很多人估计早就盼望有这东西了。比使用Ext.ux.Accordion会方便很多。
CardLayoyt也是一个新增的类,但是没有例子,所以不知道主要效果是什么。

12、 tableLayout类
tableLayout类也是新增的类,主要目的是通过一个表格的形式划分区域。
其主要定义是通过“layoutConfig: {columns:3}”设置列数,通过“defaults: {frame:true, width:200, height: 200}”来设置每个Item的宽度和高度。每个item可通过类似td定义的方式设置设置格式,例如设置rowspan合并行,colspan合并列等。

Ext 2.0版要实现一个布局的主要代码就是通过layout设置布局的类型,然后定义items的面板对象,如果在内部再划分布局,实现1.1版NestedLayoutPanel的功能,只要在内部在面板内部再定义items就行了,比以前的代码书写方式更方便,更直观了。下面我们来分析一下complex.html这例子的定义。

例子首先创建了一个Ext.Viewport进行全界面布局,布局使用的是bordeLayout(layout:'border')。在界面中总共划分了north、south、wese、east和center五个大区域。

north区域使用了一个Ext.BoxComponent组件作为该区域的面板,它的html元件是id为“north”的div(el: 'north'),高度是32(height:32)。                 new Ext.BoxComponent({ // raw
                    region:'north',
                    el: 'north',
                    height:32
                }),{

south区域使用了panel作为区域的面板,因为Viewprot的默认面板类型为panel,所以不用new Ext.Panel的方式创建面板,直接书写定义代码就行了。在代码中,定义了内容的html元件是id为“south”的div( contentEl: 'south'),带分隔控制条(split:true),初始高度是100(height: 100,不再使用以前的initialSize),移动改变的尺寸最小高度为100(minSize: 100),最大高度为200(maxSize: 200),允许折叠(collapsible: true),标题栏显示‘South’(title:'South'),内补丁为(margins:'0 0 0 0')。                }),{
                    region:'south',
                    contentEl: 'south',
                    split:true,
                    height: 100,
                    minSize: 100,
                    maxSize: 200,
                    collapsible: true,
                    title:'South',
                    margins:'0 0 0 0'
                }, {
east区域同样也是用panel作为其面板,标题为“East Side”,允许折叠,有分隔控制条,初始宽度是225,最小宽度为175,最大宽度为400,内补丁为“0 5 0 0”。在该区域还划分了一个用fitLayout作为布局的区域(layout:'fit'),这里就不再象1.1版那样用NestedLayoutPanel再划分区域会出现的问题了。在fitLayout里放置了一个tabpanel的面板,面板的没有边,当前激活的tab是第2个(注意tab的index是从0开始的),tab标签放置在底部,该tab定义了两个标签页。                }, {
                    region:'east',
                    title: 'East Side',
                    collapsible: true,
                    split:true,
                    width: 225,
                    minSize: 175,
                    maxSize: 400,
                    layout:'fit',
                    margins:'0 5 0 0',
                    items:
                        new Ext.TabPanel({
                            border:false,
                            activeTab:1,
                            tabPosition:'bottom',
                            items:[{
                                html:'<p>A TabPanel component can be a region.</p>',
                                title: 'A Tab',
                                autoScroll:true
                            },
                            new Ext.grid.PropertyGrid({
                                title: 'Property Grid',
                                closable: true,
                                source: {
                                    "(name)": "Properties Grid",
                                    "grouping": false,
                                    "autoFitColumns": true,
                                    "productionQuality": false,
                                    "created": new Date(Date.parse('10/15/2006')),
                                    "tested": false,
                                    "version": .01,
                                    "borderWidth": 1
                                }
                            })]
                        })
                 },{

   west区域也是用panel作为面板,html元件为“west-panel”,显示标题为“West”,有分隔控制条,初始宽度为200,最小宽度为175,最大宽度为400,允许折叠,内补丁为“0 0 0 5”,在区域内部又使用accordion布局划分两个区域。这个内部布局变动会显示动画(layoutConfig:{animate:true})。                  },{
                    region:'west',
                    id:'west-panel',
                    title:'West',
                    split:true,
                    width: 200,
                    minSize: 175,
                    maxSize: 400,
                    collapsible: true,
                    margins:'0 0 0 5',
                    layout:'accordion',
                    layoutConfig:{
                        animate:true
                    },
                    items: [{
                        contentEl: 'west',
                        title:'Navigation',
                        border:false,
                        iconCls:'nav'
                    },{
                        title:'Settings',
                        html:'<p>Some settings in here.</p>',
                        border:false,
                        iconCls:'settings'
                    }]
                },
center区域和1.1版的一样,是必需使用。在这里center区域不再使用默认的panel作为面板了,而是使用tab面板作为其面板(new Ext.TabPanel)。在代码里定义了两个标签页,激活的是第1个标签页。                 new Ext.TabPanel({
                    region:'center',
                    deferredRender:false,
                    activeTab:0,
                    items:[{
                        contentEl:'center1',
                        title: 'Close Me',
                        closable:true,
                        autoScroll:true
                    },{
                        contentEl:'center2',
                        title: 'Center Panel',
                       autoScroll:true
                    }]
                })

分享到:
评论
3 楼 fsdos 2008-08-13  
好文章,希望再接再厉,多发表一些布局类的文章
2 楼 hemuxiao 2008-07-01  
感谢分享.新项目已经采用EXT2.0
1 楼 zhangtianqi 2008-06-26  
理解有一定道理

相关推荐

    EXT_JS入门详解

    通过本文的介绍,相信读者已经对ExtJS有了初步的认识。接下来,建议深入学习其官方文档,并尝试编写一些简单的示例来巩固所学的知识。随着经验的积累,开发者将会发现使用ExtJS可以极大地提高Web应用的开发效率和...

    cmd脚本-bat批处理-IIS最小权限分配.zip

    cmd脚本-bat批处理-IIS最小权限分配.zip

    冬奥会复杂山地百米尺度10...预报的机器学习订正对比试验_徐景峰.caj

    冬奥会复杂山地百米尺度10...预报的机器学习订正对比试验_徐景峰.caj

    基于Matlab实现的OFDM通信系统设计与仿真研究

    OFDM(正交频分复用)是一种高效的多载波通信技术,它将高速数据流拆分为多个低速子流,并通过多个并行的低带宽子载波传输。这种技术具有高频谱效率、强抗多径衰落能力和灵活的带宽分配优势。 OFDM系统利用大量正交子载波传输数据,子载波间的正交性可有效避免码间干扰(ISI)。其数学表达为多个离散子载波信号的线性组合,调制和解调过程通过FFT(快速傅立叶变换)和IFFT(逆快速傅立叶变换)实现。其关键流程包括:数据符号映射到子载波、IFFT转换为时域信号、添加循环前缀以减少ISI、信道传输、接收端FFT恢复子载波数据和解调原始数据。 Matlab是一种广泛应用于科研、工程和数据分析的高级编程语言和交互式环境。在OFDM系统设计中,首先需掌握Matlab基础,包括编程语法、函数库和工具箱。接着,根据OFDM原理构建系统模型,实现IFFT/FFT变换、循环前缀处理和信道建模等关键算法,并通过改变参数(如信噪比、调制方式)评估系统性能。最后,利用Matlab的绘图功能展示仿真结果,如误码率(BER)曲线等。 无线通信中主要考虑加性高斯白噪声(AWGN),其在频带上均匀分布且统计独立。通过仿真OFDM系统,可在不同信噪比下测量并绘制BER曲线。分析重点包括:不同调制方式(如BPSK、QPSK)对BER的影响、循环前缀长度选择对性能的影响以及信道估计误差对BER的影响。 OFDM技术广泛应用于多个领域,如数字音频广播(DAB)、地面数字电视广播(DVB-T)、无线局域网(WLAN)以及4G/LTE和5G移动通信,是这些通信标准中的核心技术之一。 深入研究基于Matlab的OFDM系统设计与仿真,有助于加深对OFDM技术的理解,并提升解决实际通信问题的能力。仿真得到的关键性能指标(如BER曲线)对评估系统可靠性至关重要。未来可进一步探索复杂信道条件下的OFDM性能及系统优化,以适应不同应用场景

    最新罗技鼠标宏一键导入即用

    最新罗技Lua鼠标宏,直接导入即可使用。相关教程视频可在导入文件中找到,视频链接为:罗技鼠标宏教程。

    基于51单片机电子时钟的Keil程序与Proteus仿真电路

    51单片机是电子工程领域常用的入门级微控制器,广泛应用于小型电子设备,例如电子时钟。本项目将介绍如何利用51单片机设计一款简单的电子时钟,并通过Keil软件进行程序开发,同时借助Proteus仿真工具进行电路模拟,帮助初学者掌握51单片机的基础应用。 51单片机基于Intel 8051内核,集成了CPU、RAM、ROM、定时器/计数器和I/O端口等功能模块,具有易于编程和性价比高的优势。在电子时钟项目中,主要利用其定时器实现时间的精确计算。Keil μVision是51单片机的常用开发环境,支持C语言和汇编语言编程。开发时,需编写代码以控制单片机显示和更新时间,包括初始化时钟硬件、设置定时器中断、编写中断服务程序以及与LCD显示屏交互等步骤。关键环节如下:一是初始化,配置时钟源(如外部晶振)设定工作频率;二是定时器设置,选择合适模式(如模式1或模式2),设置计数初值以获得所需时间分辨率;三是中断服务,编写定时器中断服务程序,定时器溢出时更新时间并触发中断;四是显示控制,通过I/O端口驱动LCD显示屏显示当前时间。 Proteus是一款虚拟原型设计软件,可用于模拟硬件电路,帮助开发者在编程前验证电路设计。在Proteus中,可搭建51单片机、LCD模块、晶振及电阻、电容等元件,形成电子时钟电路模型。运行仿真后,可观察程序在实际电路中的运行情况,及时发现并解决问题。 实际项目中,51单片机电子时钟还涉及以下知识点:一是时钟信号产生,定时器通过计数外部时钟脉冲实现时间累计,可通过调整晶振频率和定时器初始值设置不同时间间隔;二是LCD接口,需理解LCD的命令和数据传输协议,以及如何控制背光、显示模式、行列地址等;三是中断系统,了解中断概念、中断向量及程序中中断的启用和禁用方法;四是数码管显示,若使用数码管而非LCD,需了解其显示原理及段选、位选的驱动方式。 本项目融合了单片机基础、

    项目计划书模板.PPT

    项目计划书PPT

    SROMANS.SHX

    使用方法:拷贝到Auto CAD的Fonts下

    基于蚁群算法的机械臂三维路径规划避障仿真研究

    在机器人技术领域,机械臂的避障路径规划是一项关键任务,而本压缩包中的资源专注于利用蚁群算法解决三维空间中的路径规划问题。蚁群算法(Ant Colony Optimization,ACO)是一种仿生优化算法,其灵感来源于蚂蚁在寻找食物时的信息素沉积行为,能够有效找到全局最优解,尤其适合复杂路径规划。 蚁群算法由Marco Dorigo等人提出,模拟蚂蚁寻找食物路径时释放信息素的过程。在算法中,每条可能路径被视作“虚拟”蚂蚁的路径,蚂蚁在移动时会留下信息素。信息素浓度会随时间蒸发,同时被新经过的蚂蚁加强。通过迭代,算法优化路径选择,强化高效路径,最终找到全局最优解。 在机械臂避障路径规划中,三维空间路径规划尤为重要。为此,通常将三维空间划分为网格,每个小格子代表一种状态,如无障碍、障碍或未知。通过判断每个格子的状态,确定机械臂的可行移动区域,即“可视区域”。蚁群算法应用于该三维网格,寻找从起点到终点的最佳路径。每只蚂蚁在网格上随机移动时,会考虑信息素浓度和距离因素。高浓度信息素路径更易被选择,短距离路径更具吸引力。经过多次迭代,信息素逐渐积累在最优路径上,从而得出避开障碍物的最短路径。 实际应用中,机械臂路径规划需考虑运动学限制,如关节角度范围、速度限制等,同时实时性也至关重要,算法需快速生成新路径以适应动态环境。因此,蚁群算法常与其他优化方法结合,如遗传算法或粒子群优化,以提升计算效率和路径质量。 压缩包内文件可能包含算法源代码、数据结构定义、模拟环境设定及结果可视化等内容。通过这些资源,学习者可深入了解蚁群算法在机械臂避障路径规划中的实现,并直观理解三维路径规划。该应用涉及机器人学、计算机科学、控制理论等多学科交叉,通过仿真项目,既能加深对算法的理解,又能培养解决实际问题的能力。无论是学术研究还是工业应用,掌握这种路径规划方法都极具价值。

    cmd脚本-bat批处理-Autorun 病毒清除工具.zip

    cmd脚本-bat批处理-Autorun 病毒清除工具.zip

    cmd-bat-批处理-脚本-百钱买百鸡的买法.zip

    cmd-bat-批处理-脚本-百钱买百鸡的买法.zip

    cmd-bat-批处理-脚本-变色+翻滚字符.zip

    cmd-bat-批处理-脚本-变色+翻滚字符.zip

    25年上半年湖师大学位报考附件.zip

    25年上半年湖师大学位报考附件.zip

    cmd-bat-批处理-脚本-IE 界面批处理通讯录.zip

    cmd-bat-批处理-脚本-IE 界面批处理通讯录.zip

    cmd-bat-批处理-脚本-阿拉伯数字转为罗马数字.zip

    cmd-bat-批处理-脚本-阿拉伯数字转为罗马数字.zip

    cmd脚本-bat批处理-查看电脑硬件信息.zip

    cmd脚本-bat批处理-查看电脑硬件信息.zip

    cmd脚本-bat批处理-OptimizeXp.zip

    cmd脚本-bat批处理-OptimizeXp.zip

    cmd-bat-批处理-脚本-date.zip

    cmd-bat-批处理-脚本-date.zip

    【移动应用测试】Appium自动化测试框架详解:跨平台多语言支持及应用场景Appium这一开源

    内容概要:Appium 是一个开源的移动应用自动化测试框架,能够帮助开发者和测试人员自动完成对移动应用的测试工作,支持 iOS 和 Android 平台,并兼容多种编程语言(如 Java、Python、JavaScript 等)。它的主要优势包括跨平台的超强适应性、丰富的语言支持以及与持续集成工具的无缝融合。文章详细介绍了如何使用 Python 编写测试脚本,包括前期准备、编写脚本、执行和分析结果。此外,还探讨了 Appium 在功能测试、兼容性测试和回归测试中的应用场景,并指出了性能优化和维护成本方面的挑战及应对措施。 适合人群:具备一定编程基础,尤其是从事移动应用开发或测试工作的人员,包括初级到中级的开发者和测试工程师。 使用场景及目标:①跨平台自动化测试,减少针对不同平台编写独立测试脚本的工作量;②利用多语言支持,选择熟悉的语言编写测试脚本,降低学习成本;③通过与持续集成工具结合,提高测试效率,确保代码质量;④执行功能测试、兼容性测试和回归测试,保障应用在不同设备和版本上的稳定性和一致性。 阅读建议:本文不仅介绍了 Appium 的基本概念和优势,还提供了详细的使用指南和常见问题解决方案,建议读者结合实际项目需求逐步实践,特别是在构建和优化测试脚本时,注意性能调优和版本兼容性问题。

    汽车租赁管理系统毕业论文

    汽车租赁管理系统毕业论文,一篇论文

Global site tag (gtag.js) - Google Analytics