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
也是一个新增的类,但是没有例子,所以不知道主要效果是什么。
新闻热点
疑难解答