zoukankan      html  css  js  c++  java
  • Ext学习笔记06 Window

     

    Window

    先来看一下API:

     

    Window 继承于 Panel,是Panel的子类,Window组件默认是可以浮动和拖拽的,并且支持最大最小化的能力。Panel 中的各种属性和方法在Window组件中是可以直接使用的。来看例子:

    Js代码 
    1. <script type="text/javascript">  
    2.   
    3.     Ext.onReady(function(){  
    4.         var _window = new Ext.Window({  
    5.                 title: "登陆窗体",  
    6.                 frame:true,  
    7.                 height:150,  
    8.                 300,  
    9.                 layout:"form",  
    10.                 labelWidth:45,  
    11.                 /* 样式控制 */  
    12.                 plain:true,  
    13.                 /* 控制窗口大小 */  
    14.                 resizable:false,  
    15.                 /* 自定义Window内部 CSS 样式 */  
    16.                 bodyStyle:"padding:15px",  
    17.                 /* button 定位 */  
    18.                 buttonAlign:"center",  
    19.                 /* 是否可关闭 */  
    20.                 closable:false,  
    21.                 listeners:{  
    22.                     "show":function(){alert("Hello World")},  
    23.                     "hide":function(){alert("Window is hide")},  
    24.                     "close":function(){alert("Window is closed")}  
    25.                 },  
    26.                 defaults:{xtype:"textfield", 200},  
    27.                 items:[  
    28.                         {fieldLabel:"用户名"},  
    29.                         {fieldLabel:"密 码"}  
    30.                     ],  
    31.                 buttons:[  
    32.                         {text:"确定"},  
    33.                         {  
    34.                             text:"取消",  
    35.                             handler:function(){  
    36.                                     _window.hide();                           
    37.                                 }  
    38.                         }  
    39.                     ]  
    40.             });  
    41.               
    42.         /* 显示Window组件 */  
    43.         _window.show();  
    44.     });  
    45.   
    46. </script>  

     

    效果:

     

    弹出来一个很漂亮的窗口,而且在IE和FF下效果是一样的,这一点EXT不同浏览器之间的兼容做的很好,减少了很多调试样式的工作。

     

     

    Window组件构造参数(Config Options):

    • title: 窗体名称,显示在窗体的头部,默认为空
    • minimizable:是否显示最小化按钮,true,显示最小化按钮,默认false
    • maximizable:是否显示最大化按钮,true,显示最大化按钮,默认false

    属性:

    • plain:Boolean,True,显示Window内容部分的背景和窗体背景一致,False,Window内容部分的背景较亮于Window的背景,默认为false。

     

    • bodyStyle:可以对Window组件内容部分自定义CSS样式
    • resizable:通过拖拽控制窗口大小
    • buttonAlign:调整添加到Panel中的Button的水平位置,可以取值“left”,“center”,“right”,默认“right”
    • closable:默认是“true”,显示关闭按钮
    • closeAction:关闭按钮点击时响应的动作,默认动作关闭会将窗体从DOM中移除并销毁。这里一点需要说明一下,浏览器对DOM操作是非常消耗资源的,关闭窗体可以使用‘hide’ 参数,它仅是简单的将窗体隐藏,需要的时候还可以显示出来,这样的操作速度会更快更省资源
    • items:被添加到Container的一个item或者item数组,这里的Container是Window窗体,Container和item都是Ext的element,其他的Ext Container也都有items属性,使用方法和这里是一样的。

     

    方法:

    • show:显示窗口
    • hide:隐藏窗口

     

    事件:

    • show:当窗口显示时触发
    • hide:当窗口隐藏时触发

     

     

     上面仅列出来例子中用到的一些属性方法事件,更多的需要查看Window组件的API,里面定义了非常多的属性方法事件,用到什么再去查吧。

     

     

     

    Window 内部组件的取值

    Ext为Container和内部的items之间定义了一种索引机制,可以从items向上索引其所在的Container对象,也可以从Container向下索引其内部的items,通过这种机制,就可以取得我们想要的值了。

     

     

     

    Js代码 
    1. Ext.onReady(function(){  
    2.         var _window = new Ext.Window({  
    3.                     ......  
    4.                     buttons:[  
    5.                         {  
    6.                             text:"OK",  
    7.                             handler:function(){  
    8.                                 alert(this.text);  
    9.                                     alert(this.ownerCt.title);  
    10.                         }  
    11.         ......  
    12.     });  

     

     

    先来看一下例子中的this的含义 

    • this:handler 中的 this 指向handler所在对象本身
    • ownerCt,(owner Container)当前对象所在的对象(一个Ext的Container),默认是undefined,当当前的对象被放到一个Container对象中,ownerCt会被自动赋值。

     结果第一次会弹出 Button 上的文字“OK”,第二次弹出“Get Value”,说明可以通过ownerCt向上索引到Window对象。

     

     

     

    那么如何向下索引呢?

    Js代码 
    1. var _window = new Ext.Window({  
    2.                     title:"Get Value",  
    3.                     250,  
    4.                     height:100,  
    5.                     layout:"form",  
    6.                     labelWidth:45,  
    7.                     plain:true,  
    8.                     bodyStyle:"padding:5px",  
    9.                     items:{xtype:"textfield", fieldLabel:"Name"},  
    10.                     buttons:[  
    11.                         {  
    12.                             text:"OK",  
    13.                             handler:function(){  
    14.                                 alert(this.ownerCt.items.first().getValue());  
    15.                             }  
    16.                         }  
    17.                     ]  
    18.                 });  

     

    通过 this.ownerCt.items.first().getValue() 方法就能得到input框中的值,在input框中输入meizhi



    弹出“meizhi”

     

    items:这里的items,不是构造参数中的items,this.ownerCt.items,是一个对象加上“.”的用法,是当前这个对象的属性,看一下API中的定义:

    items 是 MixedCollection 类型,是一个集合对象,MixedCollection中的几个常用方法:

    • first():返回集合当中的第一个元素
    • itemAt(index):指出index位置上的 item

    窗体里有多个 TextField 的取值:

    Js代码 
    1. Ext.onReady(function(){  
    2.     var _window = new Ext.Window({  
    3.                 title:"Get Value",  
    4.                 250,  
    5.                 height:150,  
    6.                 layout:"form",  
    7.                 labelWidth:45,  
    8.                 plain:true,  
    9.                 bodyStyle:"padding:5px",  
    10.                 items:[  
    11.                         {xtype:"textfield", fieldLabel:"Name"},  
    12.                         {xtype:"textfield", fieldLabel:"Address"}  
    13.                     ],  
    14.                 buttons:[  
    15.                     {  
    16.                         text:"OK",  
    17.                         handler:function(){  
    18.                               
    19.                             var _items = this.ownerCt.items;  
    20.                             var temp = "";  
    21.                               
    22.                             temp += "Name : " + _items.first().getValue();  
    23.                             temp += ", Address : " + _items.itemAt(1).getValue();  
    24.                               
    25.                             alert(temp);  
    26.   
    27.                         }  
    28.                     }  
    29.                 ]  
    30.             });  
    31.     _window.show();  
    32. });  

     

    效果:

     

    通过items就得到了 Container 中的 item 的值了,但是这种方法看起来不是很灵活,使用 MixedCollection 中的

    item(String / Number)方法可以通过ID,Name直接索引到目标对象,这就想我们使用 JavaScript 中的 Document.getElementById 方法一样,想要那个 item, 直接取来就好了。

     

    有一种更加常用的取 Ext 中对象的方法是  Ext.getCmp() ,这个方法可以直接通过 ID 来取到目标对象。

     

    但是实际应用中的情况是比较复杂的,页面中会存在很多的Ext Component,很多时候多个表单中会有相似甚至相同含义的对象,在为它们命名的时候非常容易命名相同,在这样的场景中大量运用 getCmp() 方法,一不小心就会出现错误。

     

    使用Cotainer的items()方法,可以在一定程度上避免上面所提到的情况发生,items()方法取的对象的范围局限在当前 Container对象的内部,这样出现重名Component对象的机会就非常小,也不容易出错。这样在调试的时候也非常方便,仅需要在当前Container的部分就可以找到问题。

  • 相关阅读:
    27 Spring Cloud Feign整合Hystrix实现容错处理
    26 Spring Cloud使用Hystrix实现容错处理
    25 Spring Cloud Hystrix缓存与合并请求
    24 Spring Cloud Hystrix资源隔离策略(线程、信号量)
    23 Spring Cloud Hystrix(熔断器)介绍及使用
    22 Spring Cloud Feign的自定义配置及使用
    21 Spring Cloud使用Feign调用服务接口
    20 Spring Cloud Ribbon配置详解
    19 Spring Cloud Ribbon自定义负载均衡策略
    18 Spring Cloud Ribbon负载均衡策略介绍
  • 原文地址:https://www.cnblogs.com/aaa6818162/p/1936742.html
Copyright © 2011-2022 走看看