Sencha touch 开发系列:容器组件:panel formpanel

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
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此声明,且在文章页面给出原文连接,否则保留追究法律责任的权利。 

 

posted @ 2012-07-11 10:26  HTML5MOB  阅读(1721)  评论(2编辑  收藏  举报