panel是一个非常有用的容器,它是由container派生出来的,它的功能基本和container一样。唯一区别是它可以做为一个弹出层(浮动在其他组件之上),其实container也可以,只是ST并未提供对应的样式效果。给大家一个小例子对比一下:
//创建一个按钮
var button = Ext.create('Ext.Button', {
text: '一个普通按钮',
id: 'rightButton',
handler:function()
{
//使用panel做为弹出提示
Ext.create('Ext.Panel', {
html: '弹出层',
left: 0,
padding: 10
}).showBy(button);
}
});
//创建一个全屏容器
Ext.create('Ext.Container', {
fullscreen: true,
items: [
{
docked: 'top',
xtype: 'titlebar',
items: [
button
]
}
]
});
效果:
当你点击按钮的时候,会弹出小提示,我们使用的是panel弹出。
这时我们改为container,看看啥效果
//创建一个按钮
var button = Ext.create('Ext.Button', {
text: '一个普通按钮',
id: 'rightButton',
handler:function()
{
//使用container做为弹出提示
Ext.create('Ext.Container', {
html: '弹出层',
left: 0,
padding: 10
}).showBy(button);
}
});
//创建一个全屏容器
Ext.create('Ext.Container', {
fullscreen: true,
items: [
{
docked: 'top',
xtype: 'titlebar',
items: [
button
]
}
]
});
效果:
看到没,看不出啥弹出效果了。只是显示出来了。
所以在做一些弹出层的时候,你可能更应该考虑panel,当然你也可以使用container去自定义一样式处理。
再看一个panel弹出层的应用实例,我们不调用showBy,而调用他的show方法,showBy字义可理解为显示在某某组件的身边。
而show则简单为显示。
代码:
//创建一个按钮
var button = Ext.create('Ext.Button', {
text: '一个普通按钮',
id: 'rightButton',
handler:function()
{
//创建一个弹出层,在屏幕中间显示
var p=Ext.create("Ext.Panel",{
modal:true,
width:'80%',
height:100,
hideOnMaskTap:true,
centered:true,
items:[{xtype:'titlebar',title:'息信选项',docked:'top'}],
html:'我在测试呢!'
});
Ext.Viewport.add(p);
p.show();
}
});
//创建一个全屏容器
Ext.create('Ext.Container', {
fullscreen: true,
items: [
{
docked: 'top',
xtype: 'titlebar',
items: [
button
]
}
]
});
效果:
和showBy不一样了吧。
看大家的需求是怎样的了。可以去练练,玩玩。
下面说下formpanel
从子面就可以看出,它肯定是由panel派生而来的了,没错,确实是这样。它是一种表单型的容器
它有一些表单的特性,如submit提交,在ST中,这个表单还有更多的功能:你可以为他指定一个数据模型,也可以获取型,你还可以很方便的获取表单所有组件的键值和设置。
下面我们来看个实例,用实例说话:
//创建一个全屏表单
var form = Ext.create('Ext.form.Panel', {
fullscreen: true,
items: [
{
xtype: 'textfield',
name: 'name',
label: 'Name'
},
{
xtype: 'emailfield',
name: 'email',
label: 'Email'
},
{
xtype: 'passwordfield',
name: 'password',
label: 'Password'
},
{
xtype: 'button',
name: 'btnSubmit',
text:'提交',
handler:function()
{
//指定提交到的url
form.setUrl("login.ashx");
//输出表单值到控制台
console.log(form.getValues());
//提交表单
form.submit();
}
}
]
});
注意看代码备注哈:
效果:
看到没?这时如果我们l输入一些值,然后我们看是表单是否有提交还是我们通过表单的getValues是否有获取到值
大家可以看到,在chrome f12 network我们可以看到,发出一个一post请求,在请求的handlers中我们看到,带过去的表单数据,正是我们输入的。
再看看控制台
也有正确输出我们的值
OK这就是ST中form的魅力。
再来个综合点的实例了:
Ext.create('Ext.form.Panel', {
fullscreen: true,
items: [{
docked: 'top',
xtype: 'titlebar',
title: "我给大家的一个综合实例",
ui:'light'
},{
xtype: 'fieldset',
title: "用户登录",
defaults:{
required : true,
labelAlign: 'left',
labelWidth: '40%'},
items: [{
id:'txtUserName',
xtype: 'textfield',
name : 'name',
label: "用户名"},
{
id:'txtPassword',
xtype: 'passwordfield',
name : 'password',
label: "密码"}],
},
{
xtype:'panel',
layout:'hbox',
height:40,
items:
[{
xtype: 'button',
text: "登录",
ui: 'action',
flex:1
},
{
xtype: 'button',
text: "重置",
ui: 'action',
flex:1,
style:'margin-left:3px;'
}
]
},
{
xtype: 'fieldset',
id:'fieldSetForget',
height:20,
cls:"margin-bottom:2px;margin-top:10px;",
instructions: '<p style="width:102px;text-align:left;color: gray;font-size:.8em;margin-top:-10px;margin-left:-5px;cursor:pointer;" id="btnForgetPassword">忘记密码?</p>',
},{
xtype: 'fieldset',
instructions: "版权所有:刘江"
}, ]
});
效果:
有同学会问,他和panel有啥区别?
区别很简单在html中form和div有啥区别,呵呵。确实是这样的,我们的formpanel生成的html源码就是一个from而panel是一个div。
只是我们ST中对这个form和panel做了一些包装变成了我们的formpanel和panel。
收工,有空的同学多多在code editor中练习下,熟悉一些重要组件。
有问题的同学可以加入我们的社区或群:13453484在线提问,我尽速解答。
作者:Louja
出处:http://html5mob.cnblogs.com 同步在:http://html5mob.com
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此声明,且在文章页面给出原文连接,否则保留追究法律责任的权利。