Ext布局类的介绍与使用

google wave NULL 博文链接:https://ssdutliuhaibo.iteye.com/blog/1284428 立即下载
【文章专栏】EXT玩家天晓得上将军-博客文章专栏 - EXT UI - -JS-堂 JavaScript 开源社区 ajaxjs.com v1.2 Beta - Powered by Discuz!
Ext布局类的介绍与使用
Ext布局类的介绍与使用
在WEB应用的开发中,应用界面的布局设计是一项很重要的内容。在EXT中,可以通过BorderLayout与NestedLayoutPanel很方便的设计出各种的布局。本文章的主要内容主要是介绍如何通过BorderLayout、NestedLayoutPanel以及各种面板设计页面布局。 1.
BorderLayout类BorderLayout类是布局中的最基本的单元,它已预设了south、 east、 west、 north和center等5个区域。你可以根据你的需要任意组合这些区域,但是要注意的一点就是,center区域是必须使用的,而且center区域不允许隐藏和折叠。创建一个新布局的语句如下:

new BorderLayout( String/HTMLElement/Element container, Object config )

其参数分别是:
container:
绑定布局的容器。绑定布局的容易可以是docume.body,也可以是其它HTMLElement。不过如果是其它HTMLElement,该HTMLElement不能是绝对定位的,或者要在该HTMLElement中加入css定义“position:relative”,还需要为该HTMLElement设置大小。
config:
布局区域的划分与定义。主要是对north、south、center、east和west五个区域就行定义。区域的定义请参考LayoutRegion类的定义参数。
BorderLayout类常用的属性、方法与事件如表1。
属性
monitorWindowResize 如果设置为发绿色,则不检测窗口大小的改变。默认值为true。
方法
add 增加一个内容面板(或子类)到某个区域。定义:public function add( String target, Ext.ContentPanel panel )参数:target:目标区域的关键字(north、south、 east、 west 或center)panel:要增加的面板类返回:Ext.ContentPanel
addRegion 增加一个不存在的区域。定义:public function addRegion( String target, Object config )参数:target:目标区域的关键字(north、south、 east、 west 或center)config:区域定义对象。返回:BorderLayoutRegion
beginUpdate 暂时停止LayoutManager的自动布局管理。定义:public function beginUpdate()参数:无返回:void
endUpdate 恢复LayoutManager的自动管理同时结束更新。定义:public function endUpdate( Boolean noLayout )参数:noLayout :如果为true则不进行布局更新。默认值为false。返回:void
findPanel 通过id查找区域内的面板。定义:public function findPanel( String panelId )参数:panelId:面板id。返回:Ext.ContentPanel或者null(没有找到)。
getEl 返回绑定布局的元件。定义:public function getEl()参数:无返回:Ext.Element
getRegion 根据关键字返回指定的区域。定义:public function getRegion( String target )参数:target:目标区域的关键字(north、south、 east、 west 或center)返回:Ext.LayoutRegion
remove 从某个区域中移除一个内容面板(或子类)。定义:public function remove( String target, Number/String/Ext.ContentPanel panel )参数:target:目标区域的关键字(north、south、 east、 west 或center)panel:要移除面板的索引值、id或者对象本身。返回:Ext.ContentPanel
restoreState 使用Ext.state.Manager或者状态提供者重建布局。定义:public function restoreState( [Ext.state.Provider provider] )参数:provider : Ext.state.Provider(可选)返回:void
showPanel 设置某个面板为当前活动面板。定义:public function showPanel( String/ContentPanel panelId )参数:panelId:要设置的面板id或对象本身。返回:Ext.ContentPanel或者null(面板不存在)
事件
regioncollapsed 当一个区域折叠的时候触发本事件。传递参数:region : Ext.LayoutRegion(折叠的区域对象)
regionexpanded 当一个区域展开的时候触发本事件。传递参数:region : Ext.LayoutRegion(展开的区域对象)
regionresized 当用户改变区域大小的时候触发本事件。传递参数:region : Ext.LayoutRegion(改变大小的区域对象)newSize: 新的区域大小(east/west为宽度,north/south为高度)。
表1
2.
LayoutRegion类因为布局是预定好了五个区域的,所以LayoutRegion类不可以创建, 只可以对预定区域进行设置、操作和附加事件。LayoutRegion的常用的属性、方法、事件和定义参数如表2。
属性
bodyEl 返回该区域的主元件对象,类型为Ext.Element。
collapsedEl 返回该区域折叠后的主html元件对象,类型为Ext.Element。
el 返回该区域的容器元件对象,类型为Ext.Element。
panels 返回该区域中的面板集合。类型为Ext.util.MixedCollection
titleEl 返回该区域的标题栏元件对象,类型为Ext.Element。
titleTextEl 返回该区域的标题显示元件,类型为HTMLElement。
方法
add 增加一个内容面板(或子类)到该区域。定义:public function add( ContentPanel... panel )参数:panel:要增加的面板,可以是多个。返回:Ext.ContentPanel,如果只增加一个,则返回增加的面板对象,否则返回null。
collapses 折叠该区域。定义:public function collapse( [Boolean skipAnim] )参数:skipAnim:如果为true则在折叠区域时不显示动态效果(如果animate设置为true),可选参数。返回:void
expand 展开该区域、定义:public function expand( Ext.EventObject e, [Boolean skipAnim] )参数:e: 触发展开区域的事件,如果手动调用则设置null。skipAnim:如果为true则在展开区域时不显示动态效果(如果animate设置为true),可选参数。返回:void
getActivePanel 获取当前为活动状态的面板。定义public function getActivePanel()参数:无返回:Ext.ContentPanel或null
getEl 返回该区域的容器元件。定义:public function findPanel( String panelId )参数:无返回:Ext. Element
getPanel 根据面板的索引、id或对象本身返回面板。定义:public function getPanel( Number/String/ContentPanel panel )参数:Panel:面板的索引、id或对象本身返回:Ext.ContentPanel
getPosition 返回该区域的位置(north/south/east/west/center)。定义:public function getPosition()参数:无返回:String
getTabs 返回该区域中的tab面板。定义:public function getTabs()参数:无返回:Ext.TabPanel
hasPanel 检查某个面板是否在该区域。定义:public function hasPanel( Number/String/ContentPanel panel )参数:panel: 面板的索引、id或对象本身返回:Boolean
hide 隐藏该面板。定义:public function hide()参数:无返回:void
hidePanel 根据面板的索引、id或对象本身隐藏面板。定义:public function getPanel( Number/String/ContentPanel panel )参数:Panel:面板的索引、id或对象本身返回:void
isVisible 检查该区域是否可见的。定义:public function isVisible()参数:无返回:Boolean,如果该区域可见返回true
remove 从该区域中移除一个面板。定义:public function remove(Number/String/Ext.ContentPanel panel )参数:panel:要移除面板的索引值、id或者对象本身。返回:Ext.ContentPanel
resizeTo 调整区域大小。如果是垂直区域(west, east)则调整宽度,如果是水平区域(north, south)则调整高度。定义:public function resizeTo( Number newSize )参数:newSize:新的宽度或高度返回:void
setCollapsedTitle 设置north/south区域折叠时的标题(可通过定义collapsedTitle参数设置)。定义:public function setCollapsedTitle( [String title] )参数:title:可选参数,标题文本可以是HTML标记返回:void
show 显示该区域。定义:public function show()参数:无返回:void
showPanel 显示该区域中某个面板。定义:public function showPanel( Number/String/ContentPanel panelId )参数:panelId:要显示面板的索引值、id或者对象本身。返回:Ext.ContentPanel
unhidePanel 显示被隐藏了的面板的标签。定义:public function unhidePanel( Number/String/ContentPanel panel )参数:panelId:要显示面板的索引值、id或者对象本身。返回:void
事件
beforeremove 当一个面板被移动或关闭时出发本事件。如果要取消该操作,请在事件中设置:e.cancel = true传递参数:this:Ext.LayoutRegionpanel:Ext.ContentPanele:取消事件对象
collapsed 当该区域被折叠是触发本事件。传递参数:this : Ext.LayoutRegion
expanded 当该区域被展开是触发本事件。传递参数:this : Ext.LayoutRegion
invalidated 当该区域在布局中改变时触发本时间。传递参数:this : Ext.LayoutRegion
panelactivated 当该区域中某个面板成为活动面板时触发本事件。传递参数:this:Ext.LayoutRegionpanel:Ext.ContentPanel
paneladded 当该区域中增加面板时触发本事件。传递参数:this:Ext.LayoutRegionpanel:Ext.ContentPanel
panelremoved 当该区域中删除面板时触发本事件。传递参数:this:Ext.LayoutRegionpanel:Ext.ContentPanel
resized 当用户改变区域大小时触发本事件。传递参数:this:Ext.LayoutRegionnewSize:新的宽度(east/west)或高度(north/south)
visibilitychange 当该区域显示状态改变时触发本事件。传递参数:this:Ext.LayoutRegionvisibility:显示(ture)或隐藏(false)
区域定义参数
alwaysShowTabs
如果设置为true,则总是显示标签栏。默认值未false。
animate
如果设置为true,则在展开和折叠时有动画效果。缺省值为false。
autoHide
如果设置为false,则当鼠标离开“浮动”区域的时候不自动隐藏。默认值是true。
autoScroll
如果设置为true,则当显示内容超出区域时显示滚动条,默认值为false。
closeOnTab
如果设置为true,则在标签标题显示关闭图标。默认值未false。
cmargins
设置区域折叠时四边的外延边距。默认值是:north/south {top: 2, left: 0, right:0, bottom: 2} or east/west {top: 0, left: 2, right:2, bottom: 0}。
collapsed
如果设置为true,则显示初始化为折叠状态。默认值为false。
collapsedTitle
在north或south区域折叠时显示的信息。
collapsible
如果设置为false,则不允许折叠。缺省值为true。
disableTabTips
如果设置为true,则屏蔽标签提示信息。默认值为false。
duration 设置展开和折叠区域时的动画效果时间长度。默认值是0.3
floatable
如果设置为false,则不允许浮动。默认值为true。
hidden
如果设置为true,则区域初始化为隐藏状态。默认值为false。
hideTabs
如果设置为true,则不显示标签。默认值为false。
hideWhenEmpty
如果设置为true,则当该区域没有面板的时候隐藏区域。
initialSize
设置该区域的初始大小。north、south是高度,east、west为宽度,center如果是上下分区则设置高度,如果是左右分区则是宽度。
margins
设置对象四边的外延边距。默认值是{top: 0, left: 0, right:0, bottom: 0}。
maxSize
设置该区域的最大尺寸。north、south是高度,east、west为宽度,center如果是上下分区则设置高度,如果是左右分区则是宽度。
minSize
设置该区域的最小尺寸。north、south是高度,east、west为宽度,center如果是上下分区则设置高度,如果是左右分区则是宽度。
minTabWidth
设置标签的最小宽度。默认值是40。
preferredTabWidth
设置首先的标签宽度。默认值是150。
preservePanels
如果设置为true,则保留被移除的面板以便重新打开。默认值为false。
resizeTabs
如果设置为true,则会自动设置标签的大小,这将会根据标签栏的空间自动调整所有标签到相同的大小,类似于FireFox 1.5的标签栏。默认值是false。
showPin
如果设置为true,则显示大头针按钮。默认值为false。
slideDuration
设置区域浮动或隐藏时的动画效果时间。默认值是0.45
split
如果设置为true,则显示分割控制条,允许改变区域的大小。默认值为false。
tabPosition
设置标签的显示位置是在顶部还是底部,默认值为“bottom”,标签显示在底部。如果要标签显示在顶部,设置值为“top”。
title
设置区域的标题(显示在面板的顶部)。如果设置titlebar的值为false,则该设置的值不会被显示。
titlebar
如果设置为true,则显示标题栏,否则不显示标题栏。默认值是true。
toolbar
设置由Ext.Toolbar创建的工具条。
useShim
设置分割控制条是否通过div层在iframes上进行拖动。默认值为false。

表2
3.
ContentPanel类ContentPanel是一个基本的面板类。面板的作用就是提供一个容器,大家可以在这个容器里加入自己要输出的内容,例如表格、树列表、Iframe等等。从contentPanel派生出GridPanel类和NestedLayoutPanel类。创建一个新面板的语句如下:
new ContentPanel ( String/HTMLElement/Ext.Element el, String/Object config, [String content] )

其参数分别是:
el:
绑定面板的容器。可以是HTMLElement的id,HTMLElement本身或者Ext.Element。
config:
面板的定义。可以是字符类型(只设置面板标题),也可以是一个定义参数对象,定义参数请参阅表3的定义参数。
Content
可选参数,字符类型,设置这个面板的HTML内容。
ContentPanel类常用的属性、方法、事件和定义参数如表3。
属性
该类没有公共属性。
方法
destroy 清除面板。。定义:public function destroy()参数:无返回:void
getEl 返回该面板的元件。定义:public function getEl()参数:无返回:Ext.Element
getId 返回该面板的id定义:public function getId()参数:无返回:字符串
getTitle 返回该面板的标题定义:public function getTitle()参数:无返回:字符串
getToolbar 返回该面板设置的工具条。定义:public function getToolbar()参数:无返回:Ext.Toolbar
getUpdateManager 返回该面板的更新管理器,从而进行Ajax更新。定义:public function getUpdateManager()参数:无返回:Ext.UpdateManager
isClosable 返回该面板是否设置了关闭图标,允许关闭。定义:public function isClosable()参数:无返回:布尔值。
load 从XHR立即加载面板的内容。注意:如果要面板被激活时才加载内容,请使用setUrl方法。定义:public function load( Object/String/Function url, [String/Object params], [Function callback], [Boolean discardUrl] )参数:url:请求返回内容的页面地址。可以是单独的地址字符串,也可以是一个定义对象,或者是一个函数。params:要提交的url的参数。可选参数。callback:回调函数。当传输完成后,执行该函数。可选。函数返回三个参数:oElement(对象本身)、 bSuccess(是否传输成功)、 oResponse(提交后返回的内容)。discardUrl:布尔值。可选。默认情况下,如果你执行一个更新后,默认url将会被修改。如果该参数设置为true,则不修改默认url。返回:Ext.ContentPanel
refresh 强制面板通过setUrl方法更新内容。如果没有调用setUrl方法,该方法将不执行。该方法不需要面板为活动面板时才更新内容。定义:public function refresh()参数:无返回:void
setContent 设置面板内容。定义:public function setContent( String content, [Boolean loadScripts] )参数:content:面板内容。loadScripts:如果设置为true,则在content寻找脚本并执行。可选参数。返回:void
setTitle 设置面板标题。定义:public function setTitle( String title )参数:title:面板标题。返回:void
setUrl 设置url以便面板加载内容。当面板是活动面板时,内容将自动从URL加载内容。定义:public function setUrl( String/Function url, [String/Object params], [Boolean loadOnce] )参数:url:参考load方法。params:参考load方法。loadOnce:布尔值。如果设置为false,则每当面板成为活动面板时都会从Ajax加载内容。如果设置为true,则只加载一次。默认值是false。返回:Ext.UpdateManager
事件
activate 当面板成为活动面板时触发本事件。传递参数:this : Ext.ContentPanel(触发事件的面板对象)
deactivate 当面板成为非活动面板时触发本事件。传递参数:this : Ext.ContentPanel(触发事件的面板对象)
resize 如果面板定义fitToFrame为true,则当面板改变大小时触发该事件。传递参数:this : Ext.ContentPanel(触发事件的面板对象)width:面板调整大小后的宽度height:面板调整大小后的高度
面板定义参数
adjustments 当执行fitToFrame时增加的宽度和高度,默认值是[0,0]
autoCreate 如果设置为true,则自动为该面板产生DOM element或者由Ext.DomHelper配置的element被创建。
autoScroll 如果设置为true,则当显示内容超出面板显示区域时显示滚动条,默认值为true。要配合fitToFrame使用。
background 如果设置为true,则添加该面板时,该面板不会成为活动面板。默认值是false。
closable 如果设置为true,则显示关闭图标,允许关闭面板。默认值为false。
fitContainer 如果设置为true,则面板会根据区域的变化自动调整面板大小。也可通过设置fitToFrame和resizeEl实现该功能。默认值为false。
fitToFrame 如果设置为true,则面板会根据区域的变化自动调整面板大小。默认值为false。
loadOnce 参看setUrl方法。
params 参看setUrl方法。
resizeEl 如果fitToFrame设置为true,则该方法设置的element会根据区域的变化自动调整大小。
title 设置面板的标题。
toolbar 设置面板的工具条。
url 参看setUrl方法。
表3
4.
NestedLayoutPanel如果一个区域内还需要再细分区域,那么需要用到NestedLayoutPanel类。NestedLayoutPanel类是ContentPanel类的一个扩展。创建一个NestedLayoutPanel的语句如下:
new NestedLayoutPanel( Ext.BorderLayout layout, String/Object config )

其参数分别是:
layout:
要绑定该面板布局。
config:
面板的定义。可以是字符类型(只设置面板标题),也可以是一个定义参数对象,定义参数请参阅表4的定义参数。
NestedLayoutPanel类常用的属性、方法、事件和定义参数如表3。
属性
该类没有公共属性。
方法
destroy 清除面板。。定义:public function destroy()参数:无返回:void
getEl 返回该面板的元件。定义:public function getEl()参数:无返回:Ext.Element
getId 返回该面板的id定义:public function getId()参数:无返回:字符串
getLayout 返回该面板的内部布局对象。定义:public function getTitle()参数:无返回:Ext.BorderLayout
getTitle 返回该面板的标题定义:public function getTitle()参数:无返回:字符串
getToolbar 返回该面板设置的工具条。定义:public function getToolbar()参数:无返回:Ext.Toolbar
getUpdateManager 返回该面板的更新管理器,从而进行Ajax更新。定义:public function getUpdateManager()参数:无返回:Ext.UpdateManager
isClosable 返回该面板是否设置了关闭图标,允许关闭。定义:public function isClosable()参数:无返回:布尔值。
load 从XHR立即加载面板的内容。注意:如果要面板被激活时才加载内容,请使用setUrl方法。定义:public function load( Object/String/Function url, [String/Object params], [Function callback], [Boolean discardUrl] )参数:url:请求返回内容的页面地址。可以是单独的地址字符串,也可以是一个定义对象,或者是一个函数。params:要提交的url的参数。可选参数。callback:回调函数。当传输完成后,执行该函数。可选。函数返回三个参数:oElement(对象本身)、 bSuccess(是否传输成功)、 oResponse(提交后返回的内容)。discardUrl:布尔值。可选。默认情况下,如果你执行一个更新后,默认url将会被修改。如果该参数设置为true,则不修改默认url。返回:Ext.ContentPanel
refresh 强制面板通过setUrl方法更新内容。如果没有调用setUrl方法,该方法将不执行。该方法不需要面板为活动面板时才更新内容。定义:public function refresh()参数:无返回:void
setContent 设置面板内容。定义:public function setContent( String content, [Boolean loadScripts] )参数:content:面板内容。loadScripts:如果设置为true,则在content寻找脚本并执行。可选参数。返回:void
setTitle 设置面板标题。定义:public function setTitle( String title )参数:title:面板标题。返回:void
setUrl 设置url以便面板加载内容。当面板是活动面板时,内容将自动从URL加载内容。定义:public function setUrl( String/Function url, [String/Object params], [Boolean loadOnce] )参数:url:参考load方法。params:参考load方法。loadOnce:布尔值。如果设置为false,则每当面板成为活动面板时都会从Ajax加载内容。如果设置为true,则只加载一次。默认值是false。返回:Ext.UpdateManager
事件
activate 当面板成为活动面板时触发本事件。传递参数:this : Ext.ContentPanel(触发事件的面板对象)
deactivate 当面板成为非活动面板时触发本事件。传递参数:this : Ext.ContentPanel(触发事件的面板对象)
resize 如果面板定义fitToFrame为true,则当面板改变大小时触发该事件。传递参数:this : Ext.ContentPanel(触发事件的面板对象)width:面板调整大小后的宽度height:面板调整大小后的高度
面板定义参数
adjustments 当执行fitToFrame时增加的宽度和高度,默认值是[0,0]
autoCreate 如果设置为true,则自动为该面板产生DOM element或者由Ext.DomHelper配置的element被创建。
autoScroll 如果设置为true,则当显示内容超出面板显示区域时显示滚动条,默认值为true。要配合fitToFrame使用。
background 如果设置为true,则添加该面板时,该面板不会成为活动面板。默认值是false。
closable 如果设置为true,则显示关闭图标,允许关闭面板。默认值为false。
fitContainer 如果设置为true,则面板会根据区域的变化自动调整面板大小。也可通过设置fitToFrame和resizeEl实现该功能。默认值为false。
fitToFrame 如果设置为true,则面板会根据区域的变化自动调整面板大小。默认值为false。
loadOnce 参看setUrl方法。
params 参看setUrl方法。
resizeEl 如果fitToFrame设置为true,则该方法设置的element会根据区域的变化自动调整大小。
title 设置面板的标题。
toolbar 设置面板的工具条。
url 参看setUrl方法。
表4
5.
GridPanleGridPanel是一个contentPanel类的子类。为Grid提供一个面板容器。创建一个GridPanel的语句如下:
new public function GridPanel( Ext.grid.Grid grid, String/Object config )

其参数分别是:
grid:
要放置的表格。Ext.grid.Grid表格类。
config:
面板的定义。可以是字符类型(只设置面板标题),也可以是一个定义参数对象,定义参数请参阅表3的定义参数。
GridPanel类常用的属性、方法、事件和定义参数如表4。
属性
该类没有公共属性。
方法
destroy 清除面板。。定义:public function destroy()参数:无返回:void
getEl 返回该面板的元件。定义:public function getEl()参数:无返回:Ext.Element
getGrid 返回该面板的表格。定义:public function getGrid()参数:无返回:Ext.grid.Grid
getId 返回该面板的id定义:public function getId()参数:无返回:字符串
getTitle 返回该面板的标题定义:public function getTitle()参数:无返回:字符串
getToolbar 返回该面板设置的工具条。定义:public function getToolbar()参数:无返回:Ext.Toolbar
getUpdateManager 返回该面板的更新管理器,从而进行Ajax更新。定义:public function getUpdateManager()参数:无返回:Ext.UpdateManager
isClosable 返回该面板是否设置了关闭图标,允许关闭。定义:public function isClosable()参数:无返回:布尔值。
load 从XHR立即加载面板的内容。注意:如果要面板被激活时才加载内容,请使用setUrl方法。定义:public function load( Object/String/Function url, [String/Object params], [Function callback], [Boolean discardUrl] )参数:url:请求返回内容的页面地址。可以是单独的地址字符串,也可以是一个定义对象,或者是一个函数。params:要提交的url的参数。可选参数。callback:回调函数。当传输完成后,执行该函数。可选。函数返回三个参数:oElement(对象本身)、 bSuccess(是否传输成功)、 oResponse(提交后返回的内容)。discardUrl:布尔值。可选。默认情况下,如果你执行一个更新后,默认url将会被修改。如果该参数设置为true,则不修改默认url。返回:Ext.ContentPanel
refresh 强制面板通过setUrl方法更新内容。如果没有调用setUrl方法,该方法将不执行。该方法不需要面板为活动面板时才更新内容。定义:public function refresh()参数:无返回:void
setContent 设置面板内容。定义:public function setContent( String content, [Boolean loadScripts] )参数:content:面板内容。loadScripts:如果设置为true,则在content寻找脚本并执行。可选参数。返回:void
setTitle 设置面板标题。定义:public function setTitle( String title )参数:title:面板标题。返回:void
setUrl 设置url以便面板加载内容。当面板是活动面板时,内容将自动从URL加载内容。定义:public function setUrl( String/Function url, [String/Object params], [Boolean loadOnce] )参数:url:参考load方法。params:参考load方法。loadOnce:布尔值。如果设置为false,则每当面板成为活动面板时都会从Ajax加载内容。如果设置为true,则只加载一次。默认值是false。返回:Ext.UpdateManager
事件
activate 当面板成为活动面板时触发本事件。传递参数:this : Ext.ContentPanel(触发事件的面板对象)
deactivate 当面板成为非活动面板时触发本事件。传递参数:this : Ext.ContentPanel(触发事件的面板对象)
resize 如果面板定义fitToFrame为true,则当面板改变大小时触发该事件。传递参数:this : Ext.ContentPanel(触发事件的面板对象)width:面板调整大小后的宽度height:面板调整大小后的高度
面板定义参数
adjustments 当执行fitToFrame时增加的宽度和高度,默认值是[0,0]
autoCreate 如果设置为true,则自动为该面板产生DOM element或者由Ext.DomHelper配置的element被创建。
autoScroll 如果设置为true,则当显示内容超出面板显示区域时显示滚动条,默认值为true。要配合fitToFrame使用。
background 如果设置为true,则添加该面板时,该面板不会成为活动面板。默认值是false。
closable 如果设置为true,则显示关闭图标,允许关闭面板。默认值为false。
fitContainer 如果设置为true,则面板会根据区域的变化自动调整面板大小。也可通过设置fitToFrame和resizeEl实现该功能。默认值为false。
fitToFrame 如果设置为true,则面板会根据区域的变化自动调整面板大小。默认值为false。
loadOnce 参看setUrl方法。
params 参看setUrl方法。
resizeEl 如果fitToFrame设置为true,则该方法设置的element会根据区域的变化自动调整大小。
title 设置面板的标题。
toolbar 设置面板的工具条。
url 参看setUrl方法。
表4
6.
一个简单的例子通过上面几节的介绍,我们认识了创建布局的基本类。下面,我们将通过一个简单的例子来学习如何实现一个布局。本例子的布局是我们通常用到的应用程序布局,顶部是一个菜单条,中间显示内容,底部是状态条,请看图1。

图1
本例子是用document.body作为布局的容器的,所以不需要为布局写一个HTML Element作为容器。布局包含3个区域,所以我们需要写3个HTML Element作为布局每个区域的容器:



内容


状态栏


从代码我们可以看到,每个div都定义了一个id,其作用就是创建区域面板时的参数el的值。
下面开始撰写创建布局的javascript代码。首先是创建一个布局,并定义各区域的参数:

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

text: '文件',

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

menu : {items: [

{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 layout = new Ext.BorderLayout(document.body,{


north:{toolbar:tb,initialSize:28},

center: {alwaysShowTabs:true,tabPosition:'top'},


south: {initialSize:28}
});
我们先别看工具条的创建代码,这个将会在另一篇文章中介绍。从黑体字部分的代码我们可以看到,我们定义了一个变量layout来保存布局对象,布局的容器是document.body,定义了noth、center和south三个区域。north区域包含一个工具条,高度是28。center区域设置了总是显示标签栏,标签位置在顶部。south区域只设置了高度为28。虽然我们 定义和创建了布局,但是目前在页面我们是看不到任何效果的,我们还需要为布局的每个区域加入面板并执行刷新:



layout.beginUpdate();



layout.add('north', new Ext.ContentPanel('north-div'));


layout.add('center', new Ext.ContentPanel('center-div','简单的布局例子'));


layout.add('south', new Ext.ContentPanel('south-div'));


layout.restoreState();


layout.endUpdate();
首先是通过beginUpdate方法中止LayoutManager的自动布局管理,然后给各区域加入一个面板。在增加center面板时,还增加了一个标题,该标题会作为标签的文本显示。然后通过restoreState方法重建布局。最后是通过endUpdate方法在恢复LayoutManager自动管理同时结束更新。这样,一个简单的布局就出来。全部代码如下:








rel="stylesheet" type="text/css" href="../../resources/css/ext-all.css">











内容


状态栏







最终效果如图2。本例文件是附件中的examples/layout/simple.html。


图2

7.
为简单的例子增加内容上面一节我们制作了一个简单的例子,但是没有内容,那么如何加入内容呢?最简单的办法就是在面板绑定容器中直接加入内容。例如在center-div中我们加入了“内容”,在south-div中加入了“状态栏”:

内容


状态栏




但是我们的应用通常是动态加载数据的,那怎么办呢?其实很简单,就是利用ContentPanel的setContent方法和setUrl方法加载。setContent方法就是直接从JavaScipt程序中插入HTML。setUrl方法则允许您从服务端得到数据加入ContentPanel中。
下面我们先测试一下setContent方法。我们要做的就是当菜单选择了一个item的时候将选择的item的文本显示在状态栏里。我们将例子中菜单单击的事件修改如下:



function onItemClick(item){


layout.getRegion('south').getPanel('south-div').setContent(item.text);


}


为了调用setContent方法,我们首先要找到对应的面板,如何找到对应的面板呢?上面的代码就是通过“layout.getRegion('south')”先找到状态栏对应的区域south,然后通过面板的id(south-div)找到对应的面板,最后是设置其内容为选择菜单的文本。找到对应的面板还有一个方法,就是分配一个变量给ContentPanel然后便可直接引用。我们修改一下center区域的面板增加方法,将center区域的面板分配给变量centerContent,然后再增加:


var centerContent=new Ext.ContentPanel('center-div','简单的布局例子');


layout.add('center', centerContent);


下面我们测试一下setUrl方法,在center-div面板中加载内容。操作是单击文件菜单下的加载后载入内容。我们先修改菜单单击事件:


function onItemClick(item){


layout.getRegion('south').getPanel('south-div').setContent(item.text);


if(item.text=='加载'){


centerContent.setUrl('content.html','',true);


centerContent.refresh();


}


}

代码中直接通过变量centerContent引用面板,调用setUrl方法加载content.html文件,没有设置提交参数,而且设置了只加载一次,然后强制刷新面板。加载后我们会发现内容超出了面板范围,有些东西看不见了,怎么办?很简单,在创建面板时加入定义参数“fitToFrame”,设置其值为true,再加入“autoScroll”设置其值为true,就可以了:


var centerContent=new Ext.ContentPanel('center-div',{title:'简单的布局例子', fitToFrame :true,autoScroll:true});


在IE中存在一个问题,就是加载的内容的样式没有生效,原因是一些浏览器支持动态样式而一些不支持,要较好地解决上述问题,推荐使用Iframe。这个我们就不测试了,只提供代码给大家参考,大家可以自己测试一下:
//center-div修改如下:
id="center-iframe" style="border: 0px none ;" scrolling="auto" frameborder="0">
代码修改如下:var centerContent=new Ext.ContentPanel('center-div',{title:'简单的布局例子', fitToFrame :true,autoScroll:true, resizeEl:'center-iframe'});

function onItemClick(item){


layout.getRegion('south').getPanel('south-div').setContent(item.text);

if(item.text=='加载'){Ext.get('center-iframe').dom.src=’content.html’

}

}

本例文件是附件中的examples/layout/simple-content.html。

8.
一个NestedLayoutPanel和GridPanel的例子我们已经可以用BorderLayout和ContentPanel建立简单的布局了,这节我们将用NestedLayPanel和GridPanel创建复杂一点的布局。
布局整体情况如图3。



图3

我们先来看看布局容易的定义:









状态栏



从源代码中我们可以看到大布局分了north、west、center和south四个区域,west区包含一个treelist的div,准备作为树列表的容器。而在center区域,我们又细分成center和south两个内部区域,这里就要使用到NestedLayPanel,而id为“center-center”的div将是grid的容器。Norht区域和South的区域与简单的例子一样,是作为菜单栏、状态栏。下面我们看javascript代码:


var layout = new Ext.BorderLayout(document.body,{


north:{toolbar:tb,initialSize:28},

west:{

split:true,

initialSize:200,
titlebar: true,
collapsible: true,
minSize: 100,
maxSize: 400,
title:'树列表',
},
center: {},

south: {initialSize:28}

});

layout.beginUpdate();
var innerLayout=new Ext.BorderLayout('center-div',{

center:{

titlebar: true,

title:'条目列表',
},

south:{

split:true,

collapsible:true,

titlebar:true,

initialSize:200,

minSize: 100,

maxSize:400,

title:'内容',

collapsedTitle:'内容'

}
});

从代码中,我们看到north和south的定义与简单的例子一样。而west区域,我们定义了它的原始大小(initialSize)为200,带标题栏(titlebar: true),标题栏显示“树列表”,可折叠(collapsible: true),带分割控制条(split:true),通过分割控制条调整区域大小的最小宽度是100,最大宽度是400。而ccenter区域则什么也没定义。
为了在center区域再划分出两个区域,我们需要新创建一个Ext.BorderLayout布局,设置其容器为“center-div”,在布局中定义center和south两个区域。center区域显示标题栏,标题为“条目列表”。south区域定义了它的原始大小(initialSize)为200,带标题栏(titlebar: true),标题栏显示“内容”,可折叠(collapsible: true),带分割控制条(split:true),通过分割控制条调整区域大小的最小宽度是100,最大宽度是400,折叠后的折叠栏标题显示“内容”。
我们注意到,west区域并没有设置折叠后的显示标题,为什么呢?其原因是west区域折叠后是垂直折叠条,而目前的HTML没有提供对一个元素的90度的旋转,所以我们只能通过修改其背景图的方式来实现。实现的方法有两种,一种是通过重新定义west或east的css定义来实现,一种是通过事件利用脚本实现。虽然通过重新定义css来实现虽然简单,不需要写javascript代码,但是存在局限性,就是当存在两个west区域(一个在主布局,一个在子布局)的时候,都是使用同一个背景图片,这样就发生了冲突了。所以一般建议是尽量使用折叠事件来实现。
通过css定义实现的方法:
.x-layout-collapsed-west{

background-image:url(images/yourbackgroundfile.gif);

background-repeat:no-repeat;

background-position:center;
}
.x-layout-collapsed-east{

background-image:url(images/ yourbackgroundfile.gif);

background-repeat:no-repeat;

background-position:center;
}

要通过javascript实现,就是在west区域添加一个“collapsed”事件,就是当west区域折叠事触发该事件,在事件中修改west区域的背景,代码如下:
layout.getRegion('west').on('collapsed',function(region){
region.collapsedEl.dom.style.background="url(../images/treelist.gif) center no-repeat";
},this);


代码中通过区域的collapsedEl方法返回west区域的HTMLelement,然后设置其背景图像。
在center区域的子区域center中,我们需要使用GridPanel面板在上面绑定一个表格,所以我们要首先定义一个表格,表格定义的具体代码可参考Grid的说明文章,我这里就不具体说了:

var grid = new Ext.grid.Grid('center-center', {

ds: ds,

cm: colModel,

autoExpandColumn:'title'

});

grid.render();

grid.getSelectionModel().selectFirstRow();





innerLayout.add('center', new Ext.GridPanel(grid));


innerLayout.add('south', new Ext.ContentPanel('center-south'));


layout.add('north', new Ext.ContentPanel('north-div'));


layout.add('west', new Ext.ContentPanel('west-div',{fitToFrame:true,resizeEl:'treelist'}));


layout.add('center', new Ext.NestedLayoutPanel(innerLayout));


layout.add('south', new Ext.ContentPanel('south-div'));

代码中我们可以看到,grid是绑定在id为“center-center”的div容器里,然后通过新建一个GridPanel绑定到center子区域的(innerLayout.add('center', new Ext.GridPanel(grid)))。south、west和north区域的添加代码和简单的例子没什么不同,而不同的地方就是center主区域代码的添加,不再是contentPanel,而是NestedLayoutPanel了,而其参数是一个BorderLayout类innerLayout。
我们再为例子加上一个树列表就完成了这个例子了。树列表的定义与创建也会有专门的文章说明,所以我也不在这里具体说了。
一个完整的NestedLayoutPanel和GridPanel例子代码如下:








rel="stylesheet" type="text/css" href="../../resources/css/ext-all.css">























状态栏







其最终效果如图4。



图4

本例文件是附件中的examples/layout/ NestedLayoutPanel.html。

9.
小结本文章主要介绍了BorderLayout、LayoutRegion、contentPanel、NestedLayoutPanel和GridPanel等5个常用的布局类,还写了一些简单的例子。希望通过这些简单的介绍和例子,我们能通过灵活的组合这些类,创建出自己需要,当然也是用户喜欢的用户界面。在布局类中还有两个类:LayoutManager和ReaderLayout。LayoutManager是BorderLayout的基类,主要是定义布局的一些常用属性、方法和事件。而ReaderLayout是BorderLayout的一个子类,它定义好了一个有5个面板的布局,组成为north区域、两个NestedLayoutPanel(一个顶部的listview和底部的preview)组成的center区域和一个用来导航、进行应用控制、信息显示的区域,它的定义和创建与BorderLayout是一样的。有兴趣的读者可以自己查看Ext的API文档进行研究。

本文例程下载:http://download.youkuaiyun.com/source/241226
避免bank conflict的使用共享内存的矩阵转置。及其循环展开。转置前后都是行主序,中间共享内存中是列主序 为了避免bank conflict,可以使用padding的方式将数组中的每一行各自占据一个bank,这样每个线程读取不同行的数据时就不会发生bank conflict。padding的方式是在每行数据后面添加一定数量的空数据,使得每行的字节数恰好是bank的整数倍,这样就能保证每行数据各自占据一个bank。具体来说,当一个线程访问共享内存中的一个元素时,GPU会根据该元素在共享内存中的地址计算出其所在的bank,然后将该元素从该bank中读取出来。 阅读详情

相关推荐

保姆级教程:在RV1126开发板上跑通YOLOv5口罩检测(从数据集到摄像头实时识别)

本文提供了一份详细的RV1126开发板部署YOLOv5口罩检测系统的全流程指南,涵盖数据集准备、模型训练优化、边缘部署及实时摄像头识别等关键步骤。重点解析了RV1126开发板的性能特征、YOLOv5模型训练调优技巧、RKNN模型转换量化策略,以及部署过程中的性能优化方案,帮助开发者高效实现边缘端目标检测应用。

weixin_27310985的博客 108

Google Wave的失败是协同工具的一个很好的教训

我们生活在一个充满选择的世界里。如果你正在建造一个产品,但不了解它为最终用户提供的具体价值,你就会为自己设定失败。当人们感觉不到你的工具的影响时,他们很快就会转向竞争对手,寻求更好(更有意义)的解决方案。

妙记多 Mojidoc 383

Rk3568 百兆以太网RMII模式DTS配置详解

本文详细解析了RK3568芯片在百兆以太网RMII模式下的DTS配置方法,包括时钟树配置、PHY接口模式定义及实际工程中的进阶设置。通过实战案例和调试技巧,帮助开发者快速解决RMII模式下的常见问题,提升工业控制设备的网络稳定性。

weixin_29189377的博客 420

Google Wave 到底是什么?

Google 实验性交流平台 Google Wave 已经揭开面纱,一些人甚至亲手体验并作了评测,然而关于 Wave 还有很多值得讨论的东西,Wave 在不同人眼里有不同的印象,有人觉得是一种更好的 E-mail 工具,有人觉得是包含了新功能的 IM,开发者看中它的开放特性及API,然而 Wave 到底是什么,CNET 的编辑对此有一番说辞。 Wave 比 e-mail 好吗?CN

COMSHARP CMS 专栏 5964

系统回溯信息:遇到严重错误。已将回溯写入...PTC... raceback.log请将其发送给|技术支持|。

一、问题分析 这种问题一旦遇上了,如果忘了保存,直接心态爆炸。 该问题一般是显卡驱动的问题。ProE/Creo对显卡的基本要求是:支持Open_GL的3D显卡,分辨率为1024×768像素以上,推荐使用64位独立显卡,显存512MB以上。如若显卡性能太低,打开软件后易自动退出。 二、解决方法 <1>有一个非常简单的方法是:在config.pro文件中,改变图形配置graphics为” win32_gdi”而不是默认的“...

幕光倾城的博客 2万+

CMake接口库实战:如何用add_library的INTERFACE选项管理跨项目依赖

本文深入探讨了CMake中add_library的INTERFACE选项在管理跨项目依赖时的实战应用。通过创建不包含源代码的接口库,开发者可以集中管理头文件路径、编译定义、链接库等公共配置,并将其声明式地传递给依赖目标。文章以构建模块化跨平台网络应用为例,详细展示了如何利用接口库实现配置的集中化、依赖关系的显式化,从而提升大型项目的可维护性和可移植性。

water的专栏 1040

Google Wave入门详细指南

Google Wave发布的第一版是功能受限并且只有被邀请者可以加入使用的。如果你还没有用过Wave,本文将介绍怎样能得到一个Wave预览版的邀请,如何创建一个新的Wave帐号,如何使用Wave及如何创建你的第一个wave。学习如何使用三种方法更新和编辑一个wave,发现和加入公共开放的wave。好, 现在让我们开始Wave之旅吧。说明:首字大写的Wave表示的是Wave协议或者Wave客

朝着梦想 渐行前进 2428

C# 通俗易懂的介绍基础知识(七)——栈Stack(从日常生活开始讲解)

C# 通俗易懂的介绍基础知识(七)——栈Stack(从日常生活开始讲解) 大家好,我是菌菌巧乐兹,励志用最简单的语言来讲解程序知识点。

菌菌兹的博客 1669

Google wave 开源代码更新 wave-libraries-2010-11-17.zip 可以下载

  google wave  的代码更新 还是够快的。   上次是 20 10 -11 -09 发布的。   才过了 8 天又发布了一个版本。   还好我 做了记录。。 http://toeo.iteye.com/admin/blogs/808628       附件是下载 文件   也可以直接从服务器下载最新 版本。   http://code.goo...

freewebsys的专栏 377

避坑指南:RK3588视频编码与SRT推流实战中,我遇到的5个典型问题及解决方案

本文深度解析RK3588平台视频编码与SRT推流实战中的五个典型问题,包括MIPI摄像头内存对齐、多线程数据传递、FFmpeg时间戳设置、SRT连接参数调优及系统资源监控。提供具体解决方案和优化技巧,帮助开发者高效实现实时视频网络传输。

weixin_28718793的博客 324

别再调PID了!用MATLAB/Simulink给四旋翼无人机搭个ADRC控制器(附完整仿真模型)

本文详细介绍了在MATLAB/Simulink环境中为四旋翼无人机搭建ADRC控制器的完整流程,包括核心原理、Simulink建模、参数调试技巧及与PID控制的性能对比。ADRC通过扩张状态观测器(ESO)有效提升无人机在复杂扰动下的控制性能,特别适合四旋翼无人机这类强耦合系统。文章还提供了完整的仿真模型和工程实践问题解决方案。

weixin_26808439的博客 382

Google Wave 使用方法

1. 什么是Google wave? EMail和IM的结合,也是GMail和GTalk的结合,本质是协同办公; 一个Wave就是Google Wave中的一个会话,可以说类似一个Conversation ,一个Wave中可以包括一个人,也可以包括若干个人,甚至还能包括机器人; Google Wave吸收了Email和IM软件的优点,是Google即将推出的信息分享、共同协作、工作讨...

醋溜的 1485

《驾驭你的AI同事:WorkBuddy深度精通》027:11.1 私有知识库接入

11.1 私有知识库接入 —— 《驾驭你的AI同事:WorkBuddy深度精通》系列图文教程,配图已统一为规范示意图。

LuckyHanMo的博客 140

从Google Wave之死说起

8月4日,Google宣布停止Wave作为一个独立产品的开发,原因是Wave的用户接受情况未达到预期。一年多前,也就是2009年5月28日,Google在旧金山总部举行的I/O大会上推出Wave时,业内好评如潮,被誉为“颠覆性”、“革命性”的产品,Wave邀请码在eBay甚至被炒到70美元的高价!从互联网产品的角度考察,Wave无疑是一个值得探讨的话题。 本系列由三篇文章组成: 高巍:产品经理...

《程序员》官方BLOG 363

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

wave2和wave1_您会在Google Wave上冲浪吗?

wave2和wave1Do you remember Google Wave? The HTML5 project was one of Google’s more exciting endeavors in 2009. Google believed that email was old, clunky and needed to be re-imagined for the 21st Cent...

culi4814的博客 280

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Google Wave技术复盘:实时协同架构的得失与遗产

实时协同编辑是现代SaaS产品的核心能力,其本质是多端状态同步、操作一致性保障与历史可追溯性的系统工程。基于操作转换(OT)与有向无环图(DAG)的数据模型,能实现毫秒级响应、视频式回放和跨设备无缝续写,显著提升团队知识协作效率。这类架构在云计算基础设施支撑下,天然适配社交软件所需的权限嵌入、订阅广播与联邦互联能力,已深度融入Notion、Figma等主流工具。本文以Google Wave为蓝本,解析其Wave Model设计哲学、XMPP联邦实践与GWT前端工程决策,还原一个超前但未竟的协同范式如何塑造今

diaojin6880的博客 442

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

wave2和wave1_Google Wave的再见

wave2和wave1Google is scrapping its Wave collaborative messaging service citing a lack of user interest. Google’s senior vice president of operations, Urs Hölzle commented: 谷歌以用户缺乏兴趣为由取消了Wave协作消息服务。 谷...

culi4814的博客 505

Google Wave失败带来的教训

Google Wave失败带来的教训<br />正是由于Google Wave的定位不清晰、稳定性差,刚满一周岁的它就注定永远长不大,甚至可能随时死亡。<br />因为我也从事跟产品相关的工作,当Google正式宣布Wave失败时,我想了很多。在做互联网产品时,我认为以下几点是非常重要的:1、快速<br />互联网让人变得比以往更急躁,多一秒的等待时间都可能让用户愤怒地关闭浏览器。一个连接与响应速度快的服务能给用户带来愉悦的体验。2、稳定<br />稳定是成功的基础。一个服务可以偶尔不稳定,比如Twitte

changjianghoulang168的专栏 630

Google Wave技术架构与企业级应用解析

实时协作技术是现代Web应用的核心需求之一,其底层原理主要依赖操作转换(OT)算法或冲突-free复制数据类型(CRDT)来实现多用户同步编辑。Google Wave作为早期先驱,通过XMPP协议和OT算法构建了去中心化协作架构,其企业级功能如沙盒化扩展机制和六层级权限模型,至今仍影响着Slack、Teams等现代协作工具的设计。在技术实现上,Wave采用GWT前端框架与Bigtable存储的组合,特别适合需要高实时性要求的场景如在线文档编辑、CRM集成等。随着WebAssembly和微前端技术的发展,这些

weixin_42579969的博客 246

Google Wave失败的原因与教训(转帖)

Google Wave失败的原因与教训byJason Ng 源地址:http://www.kenengba.com/post/2982.html Google昨天宣布将停止开发Google Wave,因为它的用户数量达不到Google的预期,但会维持它的运行并将部分代码开源。在写前面一句话的时候,我在思考要不要先介绍一下"Google Wave"是什么,但我陷入了困境,因为我不能用简短...

weixin_30613727的博客 211

Google Wave的架构

InfoQ http://www.infoq.com/cn/news/2009/06/wave  Google Wave是一个工具,也是一个平台、还是一个协议。其架构的核心是操作转换(Operational Transformation,OT),这是一个支持并发控制的理论型框架。首先需要看看Google Wave的定义:Google Wave是基于托管型XML文

萝卜的博客 796

Google Wave的失败

<br />Google Wave的失败<br /> <br /> <br />Google终于勇于承认了Google Wave的失败,承认Google Wave未获得用户的喜爱

佐佐吉牧的专栏 707

协同编辑:Google Wave架构分析

Google Wave的设计初衷是让人们互相发送信息,一起编辑文档,但用户对此感到困惑,很快就以失败告终。Google Wave持续了大约一年时间,于2010年8月被关闭。Wave“领先于时代”,而谷歌并没有有效地解释该服务的真正好处,但是谷歌高级副总裁乌尔斯·霍泽尔(Urs Holzle)说:“代码的核心部分以及驱动Wave创新的协议都已经开源,所以用户和合作伙伴可以继续我们的创新。很多东西是值得我们借鉴的。

周陆军的博客,分享it技术。 436
上一篇: 透视表组件编程模型
下一篇: Ext中同时隐藏field和label的方法
mindva
博客等级 码龄19年 2粉丝 61原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值