ExtJs2.0学习系列(2)--Ext.Panel

上一篇文章ExtJs2.0学习系列(1)--Ext.MessageBox ,受到了大家的褒贬不一,还是有的朋友提出好的建议,在此表示感谢!
今天介绍extjs中的Panel组件。

//html代码
<div id="container">
    
</div>

//js代码
var p = new Ext.Panel({
        title: 
'My Panel',//标题
        collapsible:true,//右上角上的那个收缩按钮,设为false则不显示
        renderTo: 'container',//这个panel显示在html中id为container的层中
        width:400,
        height:
200,
        html: 
"<p>我是内容,我包含的html可以被执行!</p>"//panel主体中的内容,可以执行html代码
    });


因为panel组件的子类组件包括TabPanel,GridPanel,FormPanel,TreePanel组件,所以非常有必要介绍Panel组件的配置参数和相关的属性、方法。
//配置参数(只列举部分常用参数)
1.autoLoad:有效的url字符串,把那个url中的body中的数据加载显示,但是可能没有样式和js控制,只是html数据
2.autoScroll:设为true则内容溢出的时候产生滚动条,默认为false
3.autoShow:设为true显示设为"x-hidden"的元素,很有必要,默认为false

4.bbar:底部条,显示在主体内,//代码:bbar:[{text:'底部工具栏bottomToolbar'}],
5.tbar:顶部条,显示在主体内,//代码:tbar:[{text:'顶部工具栏topToolbar'}],
6.buttons:按钮集合,自动添加到footer中(footer参数,显示在主体外)//代码:buttons:[{text:"按钮位于footer"}]
7.buttonAlign:footer中按钮的位置,枚举值为:"left","right","center",默认为right

8.collapsible:设为true,显示右上角的收缩按钮,默认为false
9.draggable:true则可拖动,但需要你提供操作过程,默认为false

10.html:主体的内容
11.id:id值,通过id可以找到这个组件,建议一般加上这个id值
12.width:宽度
13.height:高度
13.title:标题

14.titleCollapse:设为true,则点击标题栏的任何地方都能收缩,默认为false.

15.applyTo:(id)呈现在哪个html元素里面
16.contentEl:(id)呈现哪个html元素里面,把el内的内容呈现
17.renderTo:(id)呈现在哪个html元素里面
//关于这三个参数的区别(个人认为:applyTo和RenderTo强调to到html元素中,contentEl则是html元素到ext组件中去):
英文如下(本人英语poor,不敢乱翻译):
contentEl 
- This config option is used to take existing content and place it in the body of a new panel. It is not going to be the actual panel itself. (It will actually copy the innerHTML of the el and use it for the body). You should add either the x-hidden or the x-hide-display CSS class to prevent a brief flicker of the content before it is rendered to the panel. 
applyTo 
- This config option allows you to use pre-defined markup to create an entire Panel. By entire, I mean you can include the header, tbar, body, footer, etc. These elements must be in the correct order/hierarchy. Any components which are not found and need to be created will be autogenerated. 
renderTo - This config option allows you to render a Panel as its created. This would be the same as saying myPanel.render(ELEMENT_TO_RENDER_TO); 
哪位大人帮忙翻译下...
考虑到入门,方法事件会在以后的文章中以实例穿插。
1.可拖动的panel实例
下面我们做个可拖动panel例子来熟悉下panel这个最基本的组件.
//html代码
..无..

//下面创建一个允许拖动的panel,但是拖动的结果不能保存
var p=new Ext.Panel({
    title: 
'Drag me',
    x: 
100,
    y: 
100,
    renderTo: Ext.getBody(),
//x,y,renderTo:Ext.getBody()初始化panel的位置
    floating: true,//true
    frame: true,//圆角边框
    width: 400,
    height: 
200,
    draggable:
true
}).show();
//在这里也可以不show()
但是还不能拖到其他的地方,我们需要改写draggable:
draggable: {
        insertProxy: 
false,//拖动时不虚线显示原始位置

        onDrag : function(e){
            
var pel = this.proxy.getEl();
            
this.x = pel.getLeft(true);
            
this.y = pel.getTop(true);//获取拖动时panel的坐标
        },

        endDrag : 
function(e){
            
this.panel.setPosition(this.x, this.y);//移动到最终位置
        }
    }
实现了可保存的拖动,如图:

拖动的时候阴影还在原位置,我们再在draggable中的onDrag事件中添加代码:
var s = this.panel.getEl().shadow;
            
if (s) {
                s.realign(
this.x, this.y, pel.getWidth(), pel.getHeight());
            }
//shadow的realign方法的四个参数,改变shadow的位置大小属性

最后这个可拖动的panel的代码为:
var p=new Ext.Panel({
    title: 
'Drag me',
    x: 
100,
    y: 
100,
    renderTo: Ext.getBody(),
    floating: 
true,
    frame: 
true,
    width: 
400,
    height: 
200,
    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);
        }
    }
})
//效果图片我就不贴出来了

2.带顶部,底部,脚部工具栏的panel
var p=new Ext.Panel({
   id:
"panel1",
        title:
"标题",
        collapsible:
true,
        renderTo:
"container",
        closable:
true,
        width:
400,
        height:
300,
        tbar:[{text:
"按钮1"},{text:"按钮2"}], //顶部工具栏
        bbar:[{text:"按钮1"},{text:"按钮2"}],  //底部工具栏
        html:"内容",
        buttons:[{text:
"按钮1"},{text:"按钮2"}] //footer部工具栏
   });


我们已经在各种工具栏上添加了按钮,但是却没有激发事件,下面我们来添加按钮事件代码:
tbar:[{text:"按钮1",handler:function(){Ext.MessageBox.alert("我是按钮1","我是通过按钮1激发出来的弹出框!")}},{text:"按钮2"}],
//改写tbar,添加handler句柄,点击顶部工具栏上按钮1,弹出提示框,效果图大家想象下,就不贴出来了
当然,一般情况下,我们只要一个工具栏,这里只是为了演示!
3.panel工具栏
//添加下面的代码到panel配置参数中
tools:[{id:"save"},{id:"help"},{id:"up"},{id:"close",handler:function(){Ext.MessageBox.alert("工具栏按钮","工具栏上的关闭按钮时间被激发了")}}],
//id控制按钮,handler控制相应的事件
//
id的枚举值为:
toggle (collapsable为true时的默认值)
close
minimize
maximize
restore
gear
pin
unpin
right
left
up
down
refresh
minus
plus
help
search
save
print



关于panel今天就讨论到这里,欢迎批评!一起期待下一片文章.
Tag标签: ExtJs2.0
posted @ 2008-06-27 00:31 谦虚的天下 阅读(8288) 评论(32)  编辑 收藏 网摘 所属分类: ExtJs学习系列

  回复  引用    
#1楼2008-06-27 02:21 | 净化工作台[未注册用户]
学习ext源码。*
  回复  引用  查看    
#2楼2008-06-27 08:15 | 江湖工夫      
博主开个目录出来吧..便于我们收藏.谢谢!
  回复  引用    
#3楼2008-06-27 08:25 | beamsea[未注册用户]
最近正在用ext做一个项目,其中的酸甜苦辣只有自己知道,顶你一下,希望楼主继续把系列文章写完!
  回复  引用  查看    
#4楼2008-06-27 08:30 | 怀念家驹      
哪里酸甜苦辣?开发上烦不烦?
  回复  引用  查看    
#5楼2008-06-27 08:40 | liyundong      
正在学习,谢谢共享!
  回复  引用  查看    
#6楼2008-06-27 08:40 | 冷火      
这样开发也太烦人了吧,那还有什么效率可言了
  回复  引用  查看    
#7楼2008-06-27 09:04 | jillzhang      
非常棒,我也正在学习extjs,但不是很系统,以后多多交流
  回复  引用  查看    
#8楼2008-06-27 09:06 | jillzhang      
@beamsea
不管那种框架,都是有利有弊,只有做到取其利,舍其弊,才能得心应手,这个要靠量的积累

  回复  引用  查看    
#9楼2008-06-27 09:17 | 陛下      
习惯控件模式的asp.net开发人士建议搜索一下 devexpress 控件商的 AspxGridView 等进行学习;代码优雅、比较易用、效果华丽、性能稳定。
  回复  引用  查看    
#10楼2008-06-27 09:22 | 黑马      
大家在设计界面的时候可以考虑一下coolite,一套VS2005的EXTJS的控件,感觉不错。
  回复  引用  查看    
#11楼[楼主]2008-06-27 09:46 | 谦虚的天下      
@净化工作台
暂时不打算深入探讨源码

  回复  引用  查看    
#12楼[楼主]2008-06-27 09:47 | 谦虚的天下      
@黑马
coolite的确很方便
但是extjs还是要了解的

  回复  引用    
#13楼2008-06-27 10:52 | beamsea[未注册用户]
To:jillzhang
你说的很对,开始我对这个框架只是了解了一下,根本不会用,在做一个小系统的时候,我想把它用上,可结果没有想到把项目拖的死死的,耽误了很长时间!可能是因为用的不熟练吧!

  回复  引用    
#14楼2008-06-27 15:17 | securityelement [未注册用户]
听说运行起来很慢,是不是这样?

LZ能不能写个grid,带CRUD 和分页功能的例子

  回复  引用    
#15楼2008-06-27 15:22 | securityelement [未注册用户]
还有,如果想根据数据库的信息动态设置Panel的title的话,怎么实现

LZ +U ,希望你能把这个系列写好写完!

  回复  引用  查看    
#16楼[楼主]2008-06-27 15:42 | 谦虚的天下      
@securityelement
感谢支持.
1.在前台title:<%=getTitle()%>
getTitle()为后台的方法,可以实现动态设置title
2.体积比较大,所以我只准备用在后台上
3.grid的例子会在后面的系列文章中专门讨论

  回复  引用    
#17楼2008-06-27 16:03 | securityelement [未注册用户]
假设我只用ext的Panel和grid功能,是否可以把js库文件改小一点,改小以后速度有多大的提升空间.

还有一个问题,第一次访问一个ext网站时,js库应该被缓存起来了,那么我把IE全关了,再打开时还会下载js库吗,我这边测试感觉2次速度差不多

  回复  引用  查看    
#18楼2008-07-01 14:24 | 听棠.NET      
看了好几个系列的Ext文章,这套系列是最强的。
楼主继续:)我想你这样的系列以后肯定能成为最好的。可以出书喽。

  回复  引用    
#19楼2008-07-16 23:59 | 大大的[未注册用户]
把教程搬山来做什么?
  回复  引用    
#20楼2008-07-23 00:36 | 哈利由[未注册用户]
panel 的title 怎么不能指定为中文,中文标题显示不正常。。。咋个整。。
  回复  引用  查看    
#21楼2008-08-18 15:07 | 菜鸟lincha      
楼主非常不错,继续,不要管别人怎么说,我支持你
  回复  引用    
#22楼2008-09-09 17:33 | JackLee_2008[未注册用户]
博主你说这个"实现了可保存的拖动"?
怎么我客户端没有保存呢,每次位置都是原来的位置,这是为什么?

  回复  引用  查看    
#23楼[楼主]2008-09-10 16:55 | 谦虚的天下      
@JackLee_2008
endDrag : function(e){
this.panel.setPosition(this.x, this.y);//移动到最终位置
}

  回复  引用    
#24楼2008-09-23 15:19 | llp20_2000[未注册用户]
支持楼主,支持.
  回复  引用    
#25楼2008-12-21 14:13 | zzjj296[未注册用户]
支持.顶
  回复  引用    
#26楼2008-12-24 13:38 | LuckyNm[未注册用户]
@哈利由
将Code 存成UNICode即可。

  回复  引用    
#27楼2009-03-03 10:23 | ~~~[未注册用户]
小技巧:
var s = this.panel.getEl().shadow;
if (s) {
s.realign(this.x, this.y, pel.getWidth(), pel.getHeight());
}
这儿可以省去,只需要将shadow设置为false就行了...
我才刚学习Ext,谢谢作者的文章,教会我许多...

  回复  引用    
#28楼2009-03-12 11:42 | ffdfdfd[未注册用户]
写的不错。。。辛苦了
  回复  引用    
#29楼2009-03-12 11:44 | ffdfdfd[未注册用户]
@哈利由
哪里不支持中文阿我用的蛮好

  回复  引用    
#30楼2009-03-12 12:00 | it※b-boy
this.proxy.getEl(); 这句什么意思啊
  回复  引用    
#31楼2009-04-04 21:34 | ytstrive
每章必看
  回复  引用    
#32楼2009-05-21 13:40 | wzw[未注册用户]
2个 panel 都是可以拖动的
怎么在其中一个被拖动了,就让在处于顶层




发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 1230805




相关文章:

相关链接: