ext tutorial 学习 第6章奔腾吧让不同的浏览器里显示一样的布局

第6章奔腾吧让不同的浏览器里显示一样的布局。

点击: 485    评论 0    2008-01-22 16:37    发布者: wd

6.1. 有了它,我们就可以摆脱那些自称ui设计师的人了。

 

对布局很是不熟,至今为止,也是一直在抄土豆demo里的BorderLayout,frank的deepcms ProjectTracker里的ViewPort布局而已,不过有了布局,咱们不用再去摆弄frameset了,只需要div就可以做成端端正正的布局,嗯,只这一点儿就吸引了多少眼球啊。

唉,咱们一起学学关于布局的用法吧。

6.2. 关于BorderLayout

 

理论上说,把整个窗口切成五块就够了吧?东南西北中,east,south,west,north,center其中只有center中间这个部分是必须的,你完全可以把围绕在它四周的东西当作配角。

这样说还是太抽象,这个时候效果图绝对比其他途径来的直观。

实际上代码还是比较干净的。

var mainLayout = new Ext.BorderLayout(document.body, {
north: {
initialSize: 50
}, south: {
initialSize: 50
}, east: {
initialSize: 100
}, west: {
initialSize: 100
}, center: {
}
});

mainLayout.beginUpdate();
mainLayout.add('north', new Ext.ContentPanel('north-div', {
fitToFrame: true, closable: false
}));
mainLayout.add('south', new Ext.ContentPanel('south-div', {
fitToFrame: true, closable: false
}));
mainLayout.add('east', new Ext.ContentPanel('east-div', {
fitToFrame: true, closable: false
}));
mainLayout.add('west', new Ext.ContentPanel('west-div', {
fitToFrame: true, closable: false
}));
mainLayout.add('center', new Ext.ContentPanel('center-div', {
fitToFrame: true
}));
mainLayout.endUpdate();

html需要五个div与其对应,div与ContentPanel是一一对应的,请看他们的id。

<div id="north-div">north</div>
<div id="south-div">south</div>
<div id="east-div">east</div>
<div id="west-div">west</div>
<div id="center-div">center</div>

这个其实挺有意思的,你必须先构造一个BorderLayout,指定需要渲染的部分,这里是document.body,并指定5个部分的初始化大小,然后调用beginUpdate()让整个布局先不要刷新,当然我们最后会调用endUpdate()刷新布局,这样用户就获得了更好的体验。

beginUpdate()之后,我们立刻使用add方法,向5个部分分别加入Ext.ContentPanel,这些面板的第一个参数是对应 dom的id,后边是附加的参数,比如fitToFrame:true,它告诉面板在布局区域改变大小的时候调整自己的大小,然后是closable: false,这样用户就不能点击关闭按钮,关闭这个面板。

好了,你也看到了,这五个部分明显已经分隔开了,使用的时候我们只需要在合适的地方放上合适的东西就行了。

例子在lingo-sample/1.1.1/06-01.html。

6.3. 嗯,不如再看看附加效果

 

其实,即使只能在不同浏览器,把一个窗口切成相同的部分,也是足够了,不过ext带给我们的不仅仅是如此,让我们再看看其他部分吧。

6.3.1. 先看看split

 
var mainLayout = new Ext.BorderLayout(document.body, {
north: {
initialSize: 50,
split: true
}, south: {
initialSize: 50,
split: true
}, east: {
initialSize: 100,
split: true
}, west: {
initialSize: 100,
split: true
}, center: {
}
});

让我们给所有区域都加上split:true,看看会有什么效果?

请注意一点,这并不仅仅是那些边框变粗了,split让我们可以自由拖动边框,让用户可以改变各个区域的大小。

当然,我们不会让用户为所欲为的,让我们加上一点点限制,这点儿限制绝对不会让用户感到难堪。

var mainLayout = new Ext.BorderLayout(document.body, {
north: {
initialSize: 50,
minSize: 40,
maxSize: 60,
split: true
}, south: {
initialSize: 50,
minSize: 40,
maxSize: 60,
split: true
}, east: {
initialSize: 100,
minSize: 80,
maxSize: 120,
split: true
}, west: {
initialSize: 100,
minSize: 80,
maxSize: 120,
split: true
}, center: {
}
});

minSize和maxSize让用户只能在我们决定的范围内修改区域的大小,既不会太大,也不会太小。用户的行为受限,也减少了他们抱怨的机会。嘿嘿,一切尽在掌握中。

例子见lingo-sample/1.1.1/06-02.html

6.3.2. 再试试titlebar

 
var mainLayout = new Ext.BorderLayout(document.body, {
north: {
initialSize: 50,
minSize: 40,
maxSize: 60,
titlebar: true,
split: true
}, south: {
initialSize: 50,
minSize: 40,
maxSize: 60,
titlebar: true,
split: true
}, east: {
initialSize: 100,
minSize: 40,
maxSize: 60,
titlebar: true,
split: true
}, west: {
initialSize: 100,
minSize: 40,
maxSize: 60,
titlebar: true,
split: true
}, center: {
}
});

在上面的基础上,我们加入了titlebar,然后看到的就是这幅情景。

标题栏是空的,要加标题我们另有地方,看看ContentPanel的部分。

mainLayout.beginUpdate();
mainLayout.add('north', new Ext.ContentPanel('north-div', {
fitToFrame: true, closable: false, title: '北'
}));
mainLayout.add('south', new Ext.ContentPanel('south-div', {
fitToFrame: true, closable: false, title: '南'
}));
mainLayout.add('east', new Ext.ContentPanel('east-div', {
fitToFrame: true, closable: false, title: '东'
}));
mainLayout.add('west', new Ext.ContentPanel('west-div', {
fitToFrame: true, closable: false, title: '西'
}));
mainLayout.add('center', new Ext.ContentPanel('center-div', {
fitToFrame: true
}));
mainLayout.endUpdate();

经过这些改变,整个布局就变成了这个样子。

例子是lingo-sample/1.1.1/06-03.html。

6.3.3. 还不够,还不够,让四周的区域可以缩起来

 

很多软件都可以这样哦,看小面板不顺眼,就折叠起来,为中间的工作区留出更多空间哟。就像这样。

都折叠上以后就变成这样。

其实只要加一个属性就可以了,看看代码中的collapsible: true造就了现在的盛况。

var mainLayout = new Ext.BorderLayout(document.body, {
north: {
initialSize: 50,
minSize: 40,
maxSize: 60,
titlebar: true,
collapsible: true,
split: true
}, south: {
initialSize: 50,
minSize: 40,
maxSize: 60,
titlebar: true,
collapsible: true,
split: true
}, east: {
initialSize: 100,
minSize: 40,
maxSize: 60,
titlebar: true,
collapsible: true,
split: true
}, west: {
initialSize: 100,
minSize: 40,
maxSize: 60,
titlebar: true,
collapsible: true,
split: true
}, center: {
}
});

你还可以加上collapsedTitle属性,让北方和南方区域折叠之后显示,这个属性只在north和south部分有效,因为west和east是垂直的,似乎没有办法让文字旋转90度显示,所以我们需要其他方法。

参考网上的方式,是用一个图片,窄窄高高的图片,然后把它作为对应css样式的背景图,这样在east和west折叠的时候就会显示它们了。让咱们试验一下好了。

我们需要设置的css有两个,west对应左边,east对应右边。

.x-layout-collapsed-west {
background-image: url(user_male.png);
background-repeat: no-repeat;
background-position: center;
}

.x-layout-collapsed-east {
background-image: url(user_female.png);
background-repeat: no-repeat;
background-position: center;
}

最后就变成了这样。

嘿嘿,有意思吧。代码都在lingo-sample/1.1.1/06-04.html里呢,你也试试吧。

6.3.4. 给这些区域都加上个关闭按钮

 
mainLayout.beginUpdate();
mainLayout.add('north', new Ext.ContentPanel('north-div', {
fitToFrame: true, closable: true, title: '北'
}));
mainLayout.add('south', new Ext.ContentPanel('south-div', {
fitToFrame: true, closable: true, title: '南'
}));
mainLayout.add('east', new Ext.ContentPanel('east-div', {
fitToFrame: true, closable: true, title: '东'
}));
mainLayout.add('west', new Ext.ContentPanel('west-div', {
fitToFrame: true, closable: true, title: '西'
}));
mainLayout.add('center', new Ext.ContentPanel('center-div', {
fitToFrame: true
}));
mainLayout.endUpdate();

这个部分跟ContentPanel有关,把参数closable改成true就会出现那个小叉叉,按一下这个区域就关上了。

可惜现在还不知道关闭以后再怎么打开,嘿嘿。

6.3.5. 用NestedLayoutPanel在五块中再进行分割,实现更复杂的布局

 

我不会用。

6.4. 2.0的ViewPort是完全不同的实现

 

简单来说,用了ViewPort摆脱先定义BorderLayout,再beginUpdate,endUpdate的麻烦,我们就问了,为什么事情不能更简单明了呢,就让我们看看用2.0解决上头的五块是个什么样子?

首先html里的东东不变。

<div id="north-div">north</div>
<div id="south-div">south</div>
<div id="east-div">east</div>
<div id="west-div">west</div>
<div id="center-div">center</div>

剩下的就是代码了,还是那句话,我们想要在一个地方配置好所有东西,不想东奔西跑,说不定丢了什么也不知道,维护多个地方的配置简直是噩梦,2.0啊,我们崇拜你。

var viewport = new Ext.Viewport({
layout:'border',
items:[{
title: 'north',
region: 'north',
contentEl: 'north-div',
split: true,
border: true,
collapsible: true,
height: 50,
minSize: 50,
maxSize: 120
},{
title: 'south',
region: 'south',
contentEl: 'south-div',
split: true,
border: true,
collapsible: true,
height: 50,
minSize: 50,
maxSize: 120
},{
title: 'east',
region: 'east',
contentEl: 'east-div',
split: true,
border: true,
collapsible: true,
width: 120,
minSize: 120,
maxSize: 200
},{
title: 'west',
region: 'west',
contentEl: 'west-div',
split: true,
border: true,
collapsible: true,
width: 120,
minSize: 120,
maxSize: 200
},{
title: 'center',
region: 'center',
contentEl: 'center-div',
split: true,
border: true,
collapsible: true
}]
});

如果非要挑刺的话,那就是没有closable的选项了,不过现实谁会去关闭一块面板啊?至少我不会滴。

现在所有配置都放在一起了,也不用先创建后布局两步走,方便呀。

6.5. 稍稍感叹一下2.0的简洁吧,让人吃惊的还在后头呢。

 

未完待续

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. 闪烁吧!看看extjs那些美丽的例子。 1.1. 一切从extjs发布包开始 1.2. 看看ext-1.1.1的文档 1.3. 看看ext-2.0的文档 1.4. 为什么有的例子必须放在服务器上才能看到效果? 1.5. 为什么自己按照例子写的代码,显示出来总找不到图片 1.6. 我们还需要什么? 1.7. 入门之前,都看helloworld。 1.7.1. 直接使用下载的发布包 1.7.2. 只把必要的东西放进项目中 2. 震撼吧!让你知道ext表格控件的厉害。 2.1. 功能丰富,无人能出其右 2.2. 让我们搞一个grid出来耍耍吧。 2.3. 上边那个是1.x的,2.0稍微有些不同哦 2.4. 按顺序,咱们先要把常见功能讲到 2.4.1. 自主决定每列的宽度 2.4.2. 让grid支持按列排序 2.5. 让单元格显示红色的字,图片,按钮,你还能想到什么? 2.6. 更进一步,自动行号和多选checkbox 2.6.1. 自动行号 2.6.2. 全选checkbox的时间了,请允许我让2.0先上场。 2.6.3. 1.x时代的全选checkbox。 2.7. 分页了吗?分页了吗?如果还没分就看这吧。 2.7.1. 表面工作,先把分页工具条弄出来。 2.7.2. 2.0赐予我们更大的灵活性 2.7.3. 迫不得已,要加上后台脚本了。 2.7.4. 其实分页不一定要踩在脚下,也可以顶在头上。 2.8. 爱生活,EditorGrid。 2.8.1. 旋动舞步,看我们怎么把这个EditorGrid炫出来。 2.8.2. 添加一行,再把它踢掉 2.8.3. 一切就绪,你可以按保存按钮了。 2.8.4. 天马行空,保证提交的数据绝对有效 2.8.5. 限制类型,让用户只能选择我们提供的数据 2.9. 连坐法,关于选择模型 2.10. 2.0有,1.x没有的那些可怕的控件 2.10.1. 谓之曰PropertyGrid属性表格 2.10.2. 分组表格,嘻嘻,这是交叉报表吗? 2.11. 午夜怪谈,论可以改变大小,可以拖拽的表格 2.11.1. 先看看怎么拖拽改变表格的大小 2.11.2. 再看怎么在表格拖动行 2.11.2.1. 无用功 之 同一个表格拖拽 2.11.2.2. 无间道 之 从这个表格拖到另一个表格 2.11.2.3. 无疆界 之 从表格拖到树上 3. 歌颂吧!只为了树也要学ext。 3.1. 真的,我是为了树,才开始学ext的。 3.2. 传统是先做出一棵树来。 3.3. 超越一个根 3.4. 你不会认为2.0跟1.x是一样的吧? 3.5. 这种装配树节点的形式,真是让人头大。 3.6. jsp的例子是一定要有的 3.7. 让你知道树都可以做些什么 3.7.1. 检阅树形的事件 3.7.2. 右键菜单并非单纯的事件 3.7.3. 默认图标好单调,改一下撒 3.7.4. 偷偷告诉你咋从节点弹出对话框 3.7.5. 小小提示 3.7.6. 给树节点设置超链接 3.8. 灰壳显灵!让我直接修改树节点的名称吧! 3.9. 我拖,我拖,我拖拖拖。 3.9.1. 树形节点的拖拽有三种形式 3.9.2. 用事件控制拖拽 3.9.2.1. 叶子不能append 3.9.2.2. 把节点扔到哪啦 3.9.2.3. 裟椤双树,常与无常 4. 祝福吧!把表单和输入控件都改成ext的样式。 4.1. 不用ext的form啊,不怕错过有趣的东西吗? 4.2. 慢慢来,先建一个form再说 4.3. 胡乱扫一下输入控件 4.4. 起点高撒,从comboBox往上蹦 4.4.1. 凭空变出个comboBox来。 4.4.2. 把select变成comboBox。 4.4.3. 破例研究下comboBox的内在本质哟 4.4.4. 嘿嘿~本地的做完了,试试远程滴。 4.4.5. 给咱们的comboBox安上零配件 4.4.6. 每次你选择什么,我都知道 4.4.7. 露一小手,组合上面所知,省市县三级级联。哈哈~ 4.4.7.1. 先做一个模拟的,所有数据都在本地 4.4.7.2. 再做一个有后台的,需要放在服务器上咯 4.5. 把form的那些控件全部拿出来看看 4.6. form提交数据的三重门 4.6.1. ext中默认的提交形式 4.6.2. 使用html原始的提交形式 4.6.3. 单纯ajax 4.7. 验证苦旅 4.7.1. 不能为空 4.7.2. 最大长度,最小长度 4.7.3. 借助vtype 4.7.4. 自定义验证规则 4.7.5. 算不上校验的NumberField 4.8. 关于表单内部控件的布局问题 4.8.1. 什么都不做,默认的平铺布局 4.8.2. 分裂,分列 4.8.2.1. 分裂,分列。1.x 4.8.2.2. 分裂,分列。2.0 4.8.3. fieldset是个神奇的东西 4.8.4. 当某一天,需要往form加个图片什么的,该咋办? 4.9. 还要做文件上传哟 4.10. 非想非想,单选框多选框 4.10.1. 多选呢checkbox 4.10.2. 单选呢radio 5. 雀跃吧!超脱了一切的弹出窗口。 5.1. 呵呵~跳出来和缩回去总给人惊艳的感觉。 5.2. 先看看最基本的三个例子 5.2.1. Ext.MessageBox.alert() 5.2.2. Ext.MessageBox.confirm() 5.2.3. Ext.MessageBox.prompt() 5.3. 如果你想的话,可以控制得更多 5.3.1. 可以输入多行的输入框 5.3.2. 再看一个例子呗 5.3.3. 下一个例子是进度条 5.3.4. 动画效果,跳出来,缩回去 5.4. 让弹出窗口,显示我们想要的东东,比如表格 5.4.1. 2.0的弹出表格哦 5.4.2. 向2.0的window加表格 5.4.3. 1.x的叫做BasicDialog 5.4.4. 把form放进对话框 6. 奔腾吧!让不同浏览器显示一样的布局。 6.1. 有了它,我们就可以摆脱那些自称ui设计师的人了。 6.2. 关于BorderLayout 6.3. 嗯,不如再看看附加效果 6.3.1. 先看看split 6.3.2. 再试试titlebar 6.3.3. 还不够,还不够,让四周的区域可以缩起来 6.3.4. 给这些区域都加上个关闭按钮 6.3.5. 用NestedLayoutPanel在五块中再进行分割,实现更复杂的布局 6.4. 2.0的ViewPort是完全不同的实现 6.5. 脑袋上有几个标签的tabPanel 6.6. 让布局复杂一点儿 7. 低鸣吧!拖拽就像呼吸一样容易。 7.1. 如此拖拽,简直就像与生俱来的本能一样。 7.2. 第一!乱拖。 7.3. 第二!代理proxy和目标target 8. 哭泣吧!现在才开始讲基础问题。 8.1. Ext.get 8.2. 要是我们想一下子获得一堆元素咋办? 8.3. DomHelper和Template动态生成html 8.3.1. DomHelper用来生成小片段 8.3.2. 批量生成还是需要Template模板 8.4. Ext.data命名空间 8.4.1. proxy系列 8.4.1.1. 人畜无害的MemoryProxy 8.4.1.2. 常规武器HttpProxy 8.4.1.3. 洲际导弹ScriptTagProxy 8.4.2. reader系列 8.4.2.1. 简单易行ArrayReader 8.4.2.2. 灵活轻便JsonReader 8.4.2.3. 久负盛名XmlReader 8.4.3. 相信你知道怎么做加法 8.5. 跟我用json,每天五分钟 8.5.1. Hello 老爸。 8.5.2. 老妈等等,孩子先上场。 8.5.3. 老妈来了,老妈来啦。 8.5.4. Ext对json的支持力度 8.5.5. 反向操作,ext把json变成字符串 8.6. 小声说说scope 8.7. 菜单和工具条 8.7.1. 至简至廉的菜单 8.7.2. 丰富一点儿的多级菜单 8.7.3. 单选多选,菜单搞这套 8.7.4. 小把戏,定制好的菜单 8.7.5. SplitButton让按钮和菜单结合 9. 沉寂吧!我们要自己的控件。 9.1. 下拉树形选择框TreeField 9.2. 带全选的checkbox树形CheckBoxTree 9.3. 带全选的checkbox的grid 9.4. fisheye 9.5. 可以设置时间的日期控件 9.6. JsonView实现用户卡片拖拽与右键菜单 9.7. 下拉列表选择每页显示多少数据 10. 撕裂吧!邪魔外道与边缘学科。 10.1. dwr与ext整合 10.1.1. 无侵入式整合dwr和ext 10.1.2. DWRProxy 10.1.3. DWRTreeLoader 10.2. localXHR让你在不用服务器就玩ajax 10.3. 在form中使用fckeditor A. 常见问题乱弹 A.1. ext到底是收费还是免费 A.2. 怎么查看ext2的api文档 A.3. 如何在页面中引用ext A.3.1. 顺便说说常见的Ext is not defined错误 A.4. 想把弹出对话框单独拿出来用的看这 A.5. 想把日期选择框单独拿出来用的看这 A.6. 听说有人现在还不会汉化ext A.7. 碰到使用ajax获得数据,或者提交数据出现乱码 A.8. TabPanel使用autoLoad加载的页面中的js脚本没有执行 B. 修改日志 C. 后记 C.1. 2007年12月5日,迷茫阶段 C.1.1. 仇恨 C.1.2. 反省 C.2. 关于ext与dwr整合部分的讨论 C.3. 怎么看文档附件的范例 D. 贡献者列表 D.1. 感谢[飘17804726]的大力支持 D.2. 感谢[吧啦吧啦286556983]的大力支持 D.3. 感谢[游戏人生395181055]的大力支持 D.4. 感谢[綄帥77793603]的大力支持 D.5. 感谢[葡萄5793699]的大力支持 D.6. 感谢[天外小人442540141]的大力支持 D.7. 感谢[我想我是海39893874]的大力支持 D.8. 还要感谢: 来自 family168 网站的的新版extjs教程 说在前头的 1. 闪烁吧!看看extjs那些美丽的例子。 1.1. 一切从extjs发布包开始 1.2. 看看ext-1.1.1的文档 1.3. 看看ext-2.0的文档 1.4. 为什么有的例子必须放在服务器上才能看到效果? 1.5. 为什么自己按照例子写的代码,显示出来总找不到图片 1.6. 我们还需要什么? 1.7. 入门之前,都看helloworld。 1.7.1. 直接使用下载的发布包 1.7.2. 只把必要的东西放进项目中 2. 震撼吧!让你知道ext表格控件的厉害。 2.1. 功能丰富,无人能出其右 2.2. 让我们搞一个grid出来耍耍吧。 2.3. 上边那个是1.x的,2.0稍微有些不同哦 2.4. 按顺序,咱们先要把常见功能讲到 2.4.1. 自主决定每列的宽度 2.4.2. 让grid支持按列排序 2.5. 让单元格显示红色的字,图片,按钮,你还能想到什么? 2.6. 更进一步,自动行号和多选checkbox 2.6.1. 自动行号 2.6.2. 全选checkbox的时间了,请允许我让2.0先上场。 2.6.3. 1.x时代的全选checkbox。 2.7. 分页了吗?分页了吗?如果还没分就看这吧。 2.7.1. 表面工作,先把分页工具条弄出来。 2.7.2. 2.0赐予我们更大的灵活性 2.7.3. 迫不得已,要加上后台脚本了。 2.7.4. 其实分页不一定要踩在脚下,也可以顶在头上。 2.8. 爱生活,EditorGrid。 2.8.1. 旋动舞步,看我们怎么把这个EditorGrid炫出来。 2.8.2. 添加一行,再把它踢掉 2.8.3. 一切就绪,你可以按保存按钮了。 2.8.4. 天马行空,保证提交的数据绝对有效 2.8.5. 限制类型,让用户只能选择我们提供的数据 2.9. 连坐法,关于选择模型 2.10. 2.0有,1.x没有的那些可怕的控件 2.10.1. 谓之曰PropertyGrid属性表格 2.10.2. 分组表格,嘻嘻,这是交叉报表吗? 2.11. 午夜怪谈,论可以改变大小,可以拖拽的表格 2.11.1. 先看看怎么拖拽改变表格的大小 2.11.2. 再看怎么在表格拖动行 2.11.2.1. 无用功 之 同一个表格拖拽 2.11.2.2. 无间道 之 从这个表格拖到另一个表格 2.11.2.3. 无疆界 之 从表格拖到树上 3. 歌颂吧!只为了树也要学ext。 3.1. 真的,我是为了树,才开始学ext的。 3.2. 传统是先做出一棵树来。 3.3. 超越一个根 3.4. 你不会认为2.0跟1.x是一样的吧? 3.5. 这种装配树节点的形式,真是让人头大。 3.6. jsp的例子是一定要有的 3.7. 让你知道树都可以做些什么 3.7.1. 检阅树形的事件 3.7.2. 右键菜单并非单纯的事件 3.7.3. 默认图标好单调,改一下撒 3.7.4. 偷偷告诉你咋从节点弹出对话框 3.7.5. 小小提示 3.7.6. 给树节点设置超链接 3.8. 灰壳显灵!让我直接修改树节点的名称吧! 3.9. 我拖,我拖,我拖拖拖。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值