我刚才禁不住诱惑去看了一下Ext.Window的API文档,发现只是比Panel多了点什么最大化、最小化、关闭、置前、置后、动画引发目标设置、可调整大小这些功能。像什么标题栏、工具栏之类的东西在Ext.Panel早就封装好了。搞定了Ext.Panel终于可以闷声发大财罗。哈哈哈。

  这一文主要总结一下,panel的常见用法。

  一、使Panel的标题栏隐藏

  这是常有的事,常常,一个栏目并不需要标题。有什么办法呢,创建时config中加上:header:false。就ok了。

  二、如何使Panel能被拖动

  确保config中如下设置:

var config1={title:'这是标题栏',
     width:300,
     height:300,
     header:false,
     floating:true,
     renderTo:Ext.getBody(),
     draggable:{
   insertProxy: false,
     
   onDrag : function(e){
   var pel = this.proxy.getEl();
   this.x = pel.getLeft(true);
   this.y = pel.getTop(true);
     
   var s = this.panel.getEl().shadow;
   if (s) {
     s.realign(this.x, this.y, pel.getWidth(), pel.getHeight());
   }
        },
     
  endDrag : function(e){
    this.panel.setPosition(this.x, this.y);
        }
     },

     html:'这是面板的内容!!!',
     layout:'fit',
     collapsible:true};

  好了,关键就是上面红色部分了,由前面的文档可知:Ext.Panel.DD这个类只是提供移动Proxy元素的效果,鼠标一松,panel仍在老地方,所以得写代码实现。关于Ext.Panel.DD,这个类是非公开的,我在源代码中也没有找到。不晓得放在哪。最后,我只得打开FireFox+FireBug才看到它里面的东西。

  为什么一定要floating:true呢?原因很简单,要能拖动,那么这个div就是absolute的,而一个panel.el默认不会是absolute。所以非得设成floating,以让它能浮动。

  三、如何有Panel能折叠、展开效果。

  这个很简单,panel在title tools中提供一个toggle的工具,就是用它干这事的,不过,默认情况下,panel的这个功能是被关闭的。panel还提供一个功能,单击title的任意一处都会产生toggle collapse效果。相关的config属性我提出来如下:

  animCollapse : Boolean

  collapseFirst : Boolean

  collapsed : Boolean

  collapsedCls : String

  collapsible : Boolean  //事实上,把它设成true就ok了,其它几个可以不设置。

  titleCollapse : Boolean

  关于它们的使用说明请参见前面的API文档。不过,单看名字应当就晓得用了,取名很直观。

  四、怎样为panel设置title tools。

  就是怎样为Panel的标题栏添加按钮,这个容器,在config中类似如下代码即可:

  tools:[{id:close,handler:function(event, toolEl, panel){panel.hide();}}],

  格式一般是:tools:[{……},{……},{……}]

  五、怎样显示、隐藏panel

  这个很容易,panel.show()/hide()就行了。但是,如果floating:true的话,那就麻烦了,show都显示不了,我在FireBug中一看,panel.el.dom.style.left="-10000px"。这当然是显示不出来的。所以,你show了还要setPosition一下。这才行了。

  六、为panel添加子组件

  简单,在config中加items属性,类似于如下代码:

  items:[{id:'win1',xtype:'window',title:'title',height:100,width:100}],

  格式一般是:items:[{……},{……},{……}]

  如果在定义时,没有设置xtype,则子组件创建是xtype取defaultType的值。像上面,由于window创建后是不显示的,所以,只得show出来。所以,我在定义时给它一个id。这样在Ext.onReady()中就可以:Ext.getCmp("win1").show()。嘿,就出来了。其他组件的加入类似。一个{}是一个组件。

  像上面那样的叫惰性呈现,还有一种写法是:items:[new XXX(config)]。这样的定义会在组件创建时直接呈现。

  七、为panel设置布局

  这个是关键了。就是要设layout、layoutConfig。这个要详细的讲一下。平常要用嘛。这儿用BorderLayout的文档上的代码为例:

layout:'border',
     items: [{
        title: 'South Panel',
        region: 'south',
        height: 100,
        minSize: 75,
        maxSize: 250,
        margins: '0 5 5 5'
       },{
        title: 'West Panel',
        region:'west',
        margins: '5 0 0 5',
        cmargins: '5 5 0 5',
        width: 200,
        minSize: 100,
        maxSize: 300
       },{
        title: 'Main Content',
        region:'center',
        margins: '5 5 0 0'
       }],

  其实,布局类的api接口很简单,使用也不复杂。果然是把swing的那一套学过来了。

  Ext.layout.BorderLayout是一个比较特殊的布局类,它没有什么正儿八经的config,不像Panel它们。只需设一下layout,然后,在成员组件那儿用region标明是哪个区域就是了。Ext.layout.BorderLayout把一块地盘分成五个区:east、west、south、north、center

  我个人非常喜欢这个布局,因为以它作为外层布局的话,就能很方便的实现cnblogs一样的效果,我到现在还不知道那个左边列固定宽,右边列占满剩余屏幕的布局是怎么搞的,除非写javascript代码在window.onload中手工调,否则,全靠css,真的是想不出办法来,后来,我也找到一个办法:用table。table有一个特性,可以把它设成占满整个水平方向,第一列固定宽,第二列自动就是剩余的。不过,不晓得有没有纯css的解决方式,老实说,div+css实在太难控制了,table在水平方向上的布局优势还是很大的。比如,同一行,放两个内容,左边的左对齐,右边的右对齐,用div就麻烦了,又是浮动,挖空心思,用table就很显然,两个格:一个align=left,一个align=right。这话题扯远了。发牢骚罢了。

  八、怎样使得Panel能被改变大小

  事实上,如果真的panel能被改变大小,那么可以考虑使用window。只要把dragable设成false就成了。如果不喜欢那些按钮,应当也可以想到办法去掉的。panel本身没有这个功能。不过,ExtJs有一个类提供这种功能,即:Ext.Resizable。它的用法很简单,如下:

var resizer = new Ext.Resizable("element-id", {
    handles: 'all',
    minWidth: 200,
    minHeight: 100,
    maxWidth: 500,
    maxHeight: 400,
    pinned: true
});

  由上可知,它的功能是为一个指定的元素提供可改变大小的功能。这个功能不出奇吧。怎么把它用于panel。嘿,其实就一个关键,怎样取得x-panel所在元素的id。这个好办,事实上,这件事我曾在Ext.Panel篇一中就论述了。二种方法:panel.el或者panel.getEl()都一样。

  因此,代码应当这么写:

  var resizer=new Ext.Resizable(panel1.getEl(),{handlers:'all',pinned:true});

  resizer.on('resize',function(){panel1.updateBox(panel1.getSize());});

  在创建好panel之后,紧跟着加上这两行代码就行了。为什么要加上后面的那行呢?因为这个Ext.Resizable只会改变panel.getEl()的大小,但是里面的内容并不会因此而发生变化,结果是新增加的那一部分是灰色的。那是proxy的颜色吧。要把panel的子组件调整到实质大小必须要updateBox,可者是setWidth、setHeight。

  这个功能蛮简单,如果要对Ext.Resizable的详情进行了解,请参见其官方文档。

  九、怎样为Panel提供工具栏

  这个问题重要,panel提供两种工具栏:tbar、bbar。但是定义的方法都一样。首先,我要研究一下tbar的类型:Object/Array,api文档说:可以是toolbar对象、可以是toolbar的config、还可以是按钮的数组,当然也可以是前两者的数组。目标清楚了,就要小小地研究一下toolbar,toolbar这个主题比较大,事实上应当作为一个专题来搞的。不过,先搞清楚个大概用着先吧。

  这儿有一篇关于Ext.Toolbar的好文章,点此处查看!关于在Ext.Panel中使用工具栏,最直观、傻瓜式的用法,点此处查看。关于toolbar的更详细的研究、使用方法将在下一篇中给出。

  至此,关于Ext.Panel的常见问题都在这儿了,搞清楚了这些,基本上常规需求都可以实现了。

Ext的Panel总结(好文章)的更多相关文章

  1. 完善ext.grid.panel中的查询功能(紧接上一篇)

    今天的代码主要是实现,Ext.grid.panel中的查询,其实我也是一名extjs新手,开始想的实现方式是另外再创建一个新的grid类来存放查询出的数据(就是有几个分类查询就创建几个grid类),这 ...

  2. ExtJs 学习之开篇(三)Ext.grid.Panel表格中的处理

    Ext.grid.Panel Ext.create('Ext.grid.Panel',{        title:'测试表格',        width:400,        height:20 ...

  3. Ext.grid.Panel表格分页存储过程

    /*首先需要引入两个Extjs插件类 Ext.ux.data.PagingMemoryProxy和Ext.ux.ProgressBarPager这两个类*/ /*下面是控制弹出窗体放大缩小时窗体居中的 ...

  4. Extjs学习笔记--Ext.tree.Panel

    Ext.create('Ext.tree.Panel', { title: 'Simple Tree', width: 200, height: 150, store: store, rootVisi ...

  5. [转载]ExtJs4 笔记(10) Ext.tab.Panel 选项卡

    作者:李盼(Lipan)出处:[Lipan] (http://www.cnblogs.com/lipan/)版权声明:本文的版权归作者与博客园共有.转载时须注明本文的详细链接,否则作者将保留追究其法律 ...

  6. 【extjs】 extjs5 Ext.grid.Panel 搜索示例

    先看效果图: 页面js: <script type="text/javascript"> /** * 日志类型 store * */ var logTypeStore ...

  7. 【extjs】 ext5 Ext.grid.Panel 分页,搜索

    带有分页,搜索的grid. <%@page language="java" contentType="text/html; charset=UTF-8" ...

  8. Ext.grid.Panel 数据动态改变后刷新grid

    gridPanel中加载的数据分为两种:一种是本地数据加载,那另一种就是后台数据加载. 在表格中增.删.改.查 是必不可少的. 那么数据动态改变后怎样刷新表格中的数据呢. 一.后台取数据 var gr ...

  9. Ext.tree.Panel Extjs 在表格中添加树结构,并实现节点移动功能

    最近在用Extjs 做后台管理系统,真的非常好用.总结的东西分享一下. 先展示一下效果图 好了,开始吧! 首先说一下我的创建结构: 一.构造内容 这个函数中包括store的创建,treePanel的创 ...

  10. Ext.grid.Panel表格分页

    转载:http://www.cnblogs.com/libingql/archive/2012/04/22/2464994.html cshtml @{ Layout = null; } <!D ...

随机推荐

  1. Android之Socket群组聊天

    在这只做了一个简单的例子,没有用到数据库,思路就是客户端发送信息到服务器端,服务器端转发所有数据到客户端,校验服务器端发来消息是否是自己发出的,如果是自己发出的,则不显示自己的消息 贴一下Androi ...

  2. Web安全测试学习笔记(Cookie&Session)

    一,Session:含义:有始有终的一系列动作\消息1, 隐含了“面向连接” 和“保持状态”两种含义2, 一种用来在客户端与服务器之间保持状态的解决方案3, 也指这种解决方案的存储结构“把××保存在s ...

  3. Jmeter介绍

    一.添加线程组 一个性能测试请求负载是基于一个线程组完成的.一个测试计划必须有一个线程组.测试计划添加线程组非常简单.在测试计划右键弹出下拉菜单(添加-->Threads(Users)---&g ...

  4. 开发环境配置(netbeans+ant迁移到eclipse+maven)

    新公司入职,接手一个离职人员的项目,拿到的源码是以一个压缩包,用netbeans开发,ant管理:前端:jsp+extjs,后端:springmvc+hibernate+activiti+spring ...

  5. 发现第三方资源,chrome控制台

    for(var i=0,tags=document.querySelectorAll('iframe[src],frame[src],script[src],link[rel=stylesheet], ...

  6. html --- javascript --- div --- 拖拽方块

    当鼠标拖拽的很快时,光标会走出方块,所以把事件注册在了方块的父节点上, 如有疑问请参照:http://blog.csdn.net/a9529lty/article/details/2708171 使用 ...

  7. spring初探1

    spring初探1 关于新建对象,对象依赖的三种方式比较 场景 某个交易的业务组建拆分,为原先的功能模块新写了一个业务组件 使用new. 修改上层代码的对象生成部分( 如果不是面向接口编程,简直就是灾 ...

  8. 闭包在python中的应用,translate和maketrans方法详解

    python对字符串的处理是比较高效的,方法很多.maketrans和translate两个方法被应用的很多,但是具体怎么用常常想不起来. 让我们先回顾下这两个方法吧: 1.s.translate(t ...

  9. WCF寄宿方式

    WCF开发框架形成之旅---WCF的几种寄宿方式 WCF寄宿方式是一种非常灵活的操作,可以在IIS服务.Windows服务.Winform程序.控制台程序中进行寄宿,从而实现WCF服务的运行,为调用者 ...

  10. echart图表控件配置入门(二)常用图表数据动态绑定

    上一节 <echart图表控件配置入门(一)>介绍了echarts图表控件的入门配置,使开发人员可以快速搭建出一个静态的图表.但是在实际开发过程这还是不够的,不可能所有的图表控件都是静态数 ...