Alternate names
Ext.layout.TableLayoutHierarchy
Ext.BaseExt.layout.LayoutExt.layout.container.ContainerExt.layout.container.TableInherited mixins
Files
此布局允许你很轻松的将内容渲染到一个HTML的table中. 可以指定列数, 也能够使用rowspan和colspan参数来创建复杂的布局.
此类应该通过 layout: {type: 'table'}
Ext.container.Container.layout 属性进行扩展或创建, 通常应该不需要通过
类名关键字进行直接创建.
注意: 当使用参数创建布局时, 布局的专用属性必须通过Ext.container.Container.layout对象来传递, 此对象会被应用到布局内部. 对于TableLayout来说, 唯一有效的参数只有 columns 和 tableAttrs. 但是, 所有添加到此布局下的子项可以支持以下 几个布局专用属性:
创建一个TableLayout的概念与创建一个HTML的table非常相似. 你可以很容易的添加各个面板(或称为'cell'单元格), 为它们指定一些夸格参数 如rowspan和colspan, 然后它们的作用就会如同在HTML中的一样. 你可以很容易的定义总列数, 然后按照自然顺序从左至右, 从上至下地添加各个子面板. 布局将会自动的根据列数, rowspan和colspan等参数计算出如何在table中放置这些面板. 和HTML中的table一样, 你的rowspan和colspan参数值 之和必须在整个布局正确, 否则你将出现缺失/多出单元格的情况! 用例如下:
Ext.create('Ext.panel.Panel', {
title: 'Table Layout',
width: 300,
height: 150,
layout: {
type: 'table',
// The total column count must be specified here
columns: 3
},
defaults: {
// applied to each contained panel
bodyStyle: 'padding:20px'
},
items: [{
html: 'Cell A content',
rowspan: 2
},{
html: 'Cell B content',
colspan: 2
},{
html: 'Cell C content',
cellCls: 'highlight'
},{
html: 'Cell D content'
}],
renderTo: Ext.getBody()
});
一个可选的添加到容器上的CSS class扩展类名. 此属性用于为容器或所有子组件添加基于CSS规则的自定义样式. 也可参考Ext.Component.componentCls
允许一下有效值:
Defaults to: 0
设此值为true
时, 无论垂直滚动条是否需要出现, 都会在页面为垂直滚动条预留出空间(如果该操作系统下的滚动条需要占用空间).
在某些系统实例中, 容器内容的高度会随着系统的操作发生变化, 而此时你又不希望所有子组件的宽度因滚动条的出现和消失而来回改变, 这种情况下此属性会变得很有用. 滚动条将会在预留的空间出现, 子组件的宽度也不会发生改变.
Ext.define('Employee', {
extend: 'Ext.data.Model',
fields: [
{name: 'rating', type: 'int'},
{name: 'salary', type: 'float'},
{name: 'name'}
]
});
function createFakeData(count) {
var firstNames = ['Ed', 'Tommy', 'Aaron', 'Abe', 'Jamie', 'Adam', 'Dave', 'David', 'Jay', 'Nicolas', 'Nige'],
lastNames = ['Spencer', 'Maintz', 'Conran', 'Elias', 'Avins', 'Mishcon', 'Kaneda', 'Davis', 'Robinson', 'Ferrero', 'White'],
ratings = [1, 2, 3, 4, 5],
salaries = [100, 400, 900, 1500, 1000000];
var data = [];
for (var i = 0; i < (count || 25); i++) {
var ratingId = Math.floor(Math.random() * ratings.length),
salaryId = Math.floor(Math.random() * salaries.length),
firstNameId = Math.floor(Math.random() * firstNames.length),
lastNameId = Math.floor(Math.random() * lastNames.length),
rating = ratings[ratingId],
salary = salaries[salaryId],
name = Ext.String.format("{0} {1}", firstNames[firstNameId], lastNames[lastNameId]);
data.push({
rating: rating,
salary: salary,
name: name
});
}
store.loadData(data);
}
// create the Data Store
var store = Ext.create('Ext.data.Store', {
id: 'store',
model: 'Employee',
proxy: {
type: 'memory'
}
});
createFakeData(10);
var grid = Ext.create('Ext.grid.Panel', {
title: 'Grid loaded with varying number of records',
anchor: '100%',
store: store,
columns: [{
xtype: 'rownumberer',
width: 40,
sortable: false
},{
text: 'Name',
flex: 1,
sortable: true,
dataIndex: 'name'
},{
text: 'Rating',
width: 125,
sortable: true,
dataIndex: 'rating'
},{
text: 'Salary',
width: 125,
sortable: true,
dataIndex: 'salary',
align: 'right',
renderer: Ext.util.Format.usMoney
}]
});
Ext.create('Ext.panel.Panel', {
renderTo: document.body,
width: 800,
height: 600,
layout: {
type: 'anchor',
reserveScrollbar: true // There will be a gap even when there's no scrollbar
},
autoScroll: true,
items: grid,
tbar: {
defaults: {
handler: function(b) {
createFakeData(b.count);
}
},
items: [{
text: '10 Items',
count: 10
},{
text: '100 Items',
count: 100
},{
text: '300 Items',
count: 300
},{
text: '1000 Items',
count: 1000
},{
text: '5000 Items',
count: 5000
}]
}
});
Defaults to: false
一个用来创建布局的'
'元素的属性对象, 此对象将被添加到DomHelper.
一个用来创建布局的' '元素的属性对象, 此对象将被添加到DomHelper.
| 一个用来创建布局的' 一个用来创建布局的' Defined By Properties$onExtended : Arrayprivate 扩展事件 Defaults to: animatePolicy : Objectprivate 一个包含几个boolean值属性的对象, 包含的属性为指定子组件的ContextItem对哪些属性更新时需要动画效果. 例如, 一个Accordion布局应有:
Defaults to: 返回状态标记来描述如何处理跨浏览器的滚动条高度/宽度. 特别是IE在处理含'padding-bottom'的滚动条元素 时会出现问题(滚动条高度中会不含此padding值). 同样, 滚动条元素的子元素的'margin-bottom'属性值 可能会被丢失. 所有浏览器好像都会忽略子元素的'margin-right'属性和父元素的'padding-right'属性(当发生溢出时). 此方法返回一个二进制数值, 数值的各位根据不参与滚动条高度/宽度计算的因素进行设值:
为了解决'margin-bottom'属性的问题, 在子元素的最后创建一个0px高的元素就能够'隐藏'边界空白. 也可以通过将子元素再封装在一个元素中, 这样也能够'隐藏'边界空白. 封装元素的方式大概是 能够保持子元素右边界空白的唯一方案. 在Column布局中使用的就是这个方案. 为了解决'padding-bottom'属性的问题, 因为此样式来自父元素, 大概唯一简单的解决方法就是在子元素 的最后创建一个高度与'padding-bottom'值相等的元素. 而为了保护右padding, 新元素的宽度需要包含 右padding值. 发生溢出时, 用来修正body的padding值的元素. 发生溢出时, 用来修正body的padding值的元素. 本身
获取当前类的引用,此对象被实例化。不同于 statics,
this.self是依赖范围,它意味着要使用动态继承。 ... 本身 获取当前类的引用,此对象被实例化。不同于 statics,
MethodsDefined By Instance MethodsaddChildEls( ) 此方法添加解析到的每个参数到 childEls 数组. addInheritableStatics( Object members )private Parameters
afterRemove( Object item )protected applyChildEls( Object el, Object id )private beginCollapse( )private 由所属Panel在开始处理折叠前调用. 大多数布局不需要覆盖此方法的默认Ext.emptyFn实现. beginExpand( )private 由所属Panel在开始处理展开前调用. 大多数布局不需要覆盖此方法的默认Ext.emptyFn实现. beginLayout( Object ownerContext ) 除了基类的工作任务外, 容器还需要一些额外的缓存数据, 以下属性会被添加到所属上下文环境(ownerContext)中
visibleItems: getVisibleItems的返回结果
childItems: 所有子组件的环境... 除了基类的工作任务外, 容器还需要一些额外的缓存数据, 以下属性会被添加到所属上下文环境(ownerContext)中
Parameters
Overrides: Ext.layout.Layout.beginLayout beginLayoutCycle( Ext.layout.ContextItem ownerContext ) 在所有计算循环开始前重置DOM属性值, 对计算进行预处理. 覆盖时注意: 此函数处于DOM写阶段, 须避免任何对DOM的读操作. Parameters
calculate( Ext.layout.ContextItem ownerContext )abstract 执行当前布局的计算. 此函数至少会被调用一次, 如果属性done在返回前被标记为未完成状态,则将 重复调用此函数. 在刚进入此函数时done的属性值总是为'true'. 覆盖时注意: 此函数处于DOM读阶段, 须避免任何对DOM的写操作. 作为代替, DOM的写操作应该被写入 Ext.layout.ContextItem中以在下次刷新时更新DOM. Parameters
calculateOverflow( Ext.layout.ContextItem ownerContext, Object containerSize, Number dimensions ) 为容器进行溢出处理. 此方法应在布局计算出contentWidth/Height后立刻调用. 此方法需要的参数除了 传给calculate方法的ownerContext以外, 还需要容器尺寸大小(由getContainerSize返回的对象). Parameters
调用原来的方法,这是以前的override重写
Ext.define('My.Cat', {
constructor: function() {
alert("I'm a cat!");
}
});
... 调用原来的方法,这是以前的override重写
This method has been deprecated since 4.1 版本 使用 callParent 代替. Parameters
Returns
所谓的"parent"方法是指当前的方法。 这是以前的方法派生或重写(参见 Ext.define)。
这可以用来重写如下:
This also works with static methods.
然后,它也可以重写静态方法。
Parameters
Returns
completeLayout( Ext.layout.ContextItem ownerContext ) 此函数(如果被实现)会在布局即将完成循环周期(done没有被设为'false')时被调用. 一个布局 有可能在计算完成后而循环结束前就已经被清除, 这种情况下, 此函数将不被调用. 布局也可能在此函数调用 之后被执行清除, 这将导致calculate计算函数被重新执行, 然后再次调用此函数. 覆盖时注意: 此函数处于DOM读阶段, 须避免任何对DOM的写操作. 作为代替, DOM的写操作应该被写入 Ext.layout.ContextItem中以在下次刷新时更新DOM. 子类不一定要实现此函数, 事实上, 应仅在必要时才实现. Parameters
configureItem( Object item )protected destroy( )protected 销毁此布局. 函数会从目标元素(target)中删除一个目标样式(targetCls)并调用'onDestroy'. 子类可以覆盖此函数或'onDestroy', 但是所有实现必须调用基类函数, 使基类能够完成清除工作. 此函数(或'onDestroy')可以由子类覆盖, 以用来清除事件处理或清除未直接管理的DOM节点. doRenderPadder( Object out, Object renderData ) 创建一个元素, 以使下/右的'body padding'与浏览器保持一致. 此元素的尺寸定义是基于calculateOverflow的计算是否需要滚动条. 如果manageOverflow参数为'false', 那么此元素将不会被创建. 详情参见getScrollRangeFlags. ParametersfinalizeLayout( Ext.layout.ContextItem ownerContext ) 此函数(如果被实现)会在所有布局计算结束后调用. 很多方面与completeLayout类似. 此函数 可以对当前(或其他)布局变进行清除(参见Ext.layout.Context.invalidate), 但是最好避免这种 情况. 此函数应用来进行最后的读取操作, 所以最好不要在这个阶段进行任何清除布局操作. 不过此函数仍可以 用来执行最后的检查操作, 即使这些检查可能需要所有其他的布局都完成计算并清除某些计算结果. 覆盖时注意: 此函数处于DOM读阶段, 须避免任何对DOM的写操作. 作为代替, DOM的写操作应该被写入 Ext.layout.ContextItem中以在下次刷新时更新DOM. 子类不一定要实现此函数, 事实上, 应仅在必要时才实现. Parameters
finishedLayout( Ext.layout.ContextItem ownerContext ) 此函数在所有布局都完成计算且计算结构都刷新到DOM时调用. 不会再有更多的布局被执行, 且此函数在每个 布局的执行过程中仅被调用一次. 基类组件布局会缓存lastComponentSize. 覆盖时注意: 此函数处于DOM写入阶段, 须避免任何对DOM的读操作. 子类不一定要实现此函数, 事实上, 应仅在必要时才实现. Parameters
返回容器的尺寸大小. 只有确定值的尺寸能够返回, 因为受外容器宽/高约束的包装模型的尺寸是由容器的布局决定的. 如果calculateOverflow方法已被调用且manageOverflow参数为'true', 那么尺寸可能需要根据滚动条的尺寸进行调整. Parameters
ReturnsgetInitialConfig( Object name )private getLayoutItems( ) : Ext.Component[] 返回一个子组件的数组. 或用于渲染阶段(布局基类的beforeLayout方法), 或用于布局阶段(onLayout方法). Returns
Overrides: Ext.layout.Layout.getLayoutItems getRenderedItems( ) : Arrayprotected getTarget( ) : Ext.Element getVisibleItems( ) : Arrayprotected implement( )private 这个类的初始化配置。典型例子:
Ext.define('My.awesome.Class', {
// 这是默认配置
config: {
name: 'Awesome',
isAwes... 这个类的初始化配置。典型例子:
Parameters
Returns
initLayout( )protected 在渲染前仅执行一次的初始化函数. isValidParent( Object item, Object target, Object position )protected needsDivWrap( )private 用于处理此布局在Opera 10.5浏览器下的错误. notifyOwner( )private 在所有布局上下文环境中的布局刷新都完成以后, 为每个布局进行调用. Overrides: Ext.layout.Layout.notifyOwner onConfigUpdate( Object names, Object callback, Object scope )private 当组件内容的子项发送某种变化时, 调用此函数. 此函数默认调用布局所属组件的 Ext.AbstractComponent.updateLayout函数. Parameters
Returns
onExtended( Object fn, Object scope )private removeChildEls( Function testFn ) Removes items in the childEls array based on the return value of a supplied test
function. ... Removes items in the childEls array based on the return value of a supplied test function. The function is called with a entry in childEls and if the test function return true, that entry is removed. If false, that entry is kept. Parameters
renderChildren( )private 遍历所有的子组件, 确保他们被放置在table结构中正确的单元格位置上. renderItem( Ext.Component item, Ext.dom.Element target, Number position )private 将组件渲染到目标元素(Element)上 Parameters
renderItems( Object items, Object target )protected 获取从该对象被实例化的类的引用。 请注意不同于 self,
ReturnstriggerExtended( )private 配置扩展 Defined By Static MethodsaddMembers( Object members )static 方法/属性添加到这个类的原型。
Parameters
添加/重写这个类的静态属性。
Parameters
Returns
这个类的原型借用另一个类的成员
Ext.define('Bank', {
money: '$$$',
printMoney: function() {
alert('$$$$$$$');
}
... 这个类的原型借用另一个类的成员
ParametersReturns
创建这个类的新实例。
所有参数传递至类的构造。 Returns
createAlias( String/Object , String/Object origin )static 创建现有的原型方法的别名。例如:
Ext.define('My.cool.Class', {
method1: function() { ... ... 创建现有的原型方法的别名。例如:
Parameters
以字符串格式,获取当前类的名称。
Returns
重写这个类的成员。通过callParent重写的方法可以调用。
在4.1版本, 直接利用这种方法已经过时了。 使用 Ext.define 代替:
以上完成了相同的结果,但可以由Ext.Loader重写, 其目标类和生成过程中,可以决定是否需要根据目标类所需的状态覆盖管理(My.Cat)。 This method has been deprecated since 4.1.0 使用 Ext.define 代替 Parameters
Returns
|