Ext.js的组件体系

一 . Ext的组件大致可以分成三大类,即基本组件、工具栏组件、表单及元素组件。

基本组件有:

        xtype       Class

        box         Ext.BoxComponent 具有边框属性的组件

        Button      Ext.Button 按钮

        colorpalette Ext.ColorPalette 调色板

        component   Ext.Component 组件

        container   Ext.Container 容器

        dataview    Ext.DataView 数据显示视图

        datepicker Ext.DatePicker 日期选择面板

        editor      Ext.Editor 编辑器

        editorgrid Ext.grid.EditorGridPanel 可编辑的表格

        grid        Ext.grid.GridPanel 表格

        paging      Ext.PagingToolbar 工具栏中的间隔

        panel       Ext.Panel 面板

        progress    Ext.ProgressBar 进度条

        splitbutton Ext.SplitButton 可分裂的按钮

        tabpanel    Ext.TabPanel 选项面板

        treepanel   Ext.tree.TreePanel 树

        viewport    Ext.ViewPort 视图

        window      Ext.Window 窗口

工具栏组件有

        toolbar     Ext.Toolbar 工具栏

        tbbutton    Ext.Toolbar.Button 按钮

        tbfill      Ext.Toolbar.Fill 文件

        tbitem      Ext.Toolbar.Item 工具条项目

        tbseparator Ext.Toolbar.Separator 工具栏分隔符

        tbspacer    Ext.Toolbar.Spacer 工具栏空白

        tbsplit     Ext.Toolbar.SplitButton 工具栏分隔按钮

        tbtext      Ext.Toolbar.TextItem 工具栏文本项

表单及字段组件包含

        form        Ext.FormPanel Form 面板

        checkbox    Ext.form.Checkbox checkbox 录入框

        combo       Ext.form.ComboBox combo 选择项

        datefield   Ext.form.DateField 日期选择项

        field       Ext.form.Field 表单字段

        fieldset    Ext.form.FieldSet 表单字段组

        hidden      Ext.form.Hidden 表单隐藏域

        htmleditor Ext.form.HtmlEditor html 编辑器

        numberfield Ext.form.NumberField 数字编辑器

        radio       Ext.form.Radio 单选按钮

        textarea    Ext.form.TextArea 区域文本框

        textfield   Ext.form.TextField 表单文本框

        timefield   Ext.form.TimeField 时间录入项

        trigger     Ext.form.TriggerField 触发录入项

1.1.组件的使用

        组件可以直接通过new 关键子来创建,比如控件一个窗口,使用new Ext.Window(),创建一个表格则使用new Ext.GridPanel()。当然,除了一些普通的组件以外,一般都会在构造函数中通过传递构造参数来创建组件。

组件的构造函数中一般都可以包含一个对象,这个对象包含创建组件所需要的配置属性及值,组件根据构造函数中的参数属性值来初始化组件。比如下面的例子:

var obj={title:"hello",width:300,height:200,html:''Hello,Ext.js!'};

var panel=new Ext.Panel(obj);

panel.render("hello");

<div id="hello"></div>


可以省掉变量obj,直接写成如下的形式: 

var panel=new Ext.Panel({title:"hello",width:300,height:200,html:'<h1>'Hello,Ext.js!</h1>'});

panel.render("hello");


render 方法后面的参数表示页面上的div 元素id,也可以直接在参数中通过renderTo 参数来省略手动调用render 方法,只需要在构造函数的参数中添加一个renderTo 属性即可

var panel=new Ext.Panel({renderTo:"hello",title:"hello",width:300,height:200,html:'<h1>'Hello,Ext.js!</h1>'});

 

对于容器中的子元素组件,都支持延迟加载的方式创建控件,此时可以直接通过在需要父组件的构造函数中,通过给属性items 传递数组方式实现构造。如下面的代码:

var panel=new Ext.TabPanel(

{width:300,height:200,items:[{title:"面板1",height:30},{title:"面板2",height:30},{title:"面板3",height:30}]}

);

panel.render("hello");


注意中括号中加粗部份的代码,这些代码定义了TabPanel 这个容器控件中的子元素,这里包括三个面板。上面的代码与下面的代码等价:

var panel=new Ext.TabPanel(

{width:300,height:200,items:[

new Ext.Panel( {title:"面板1",height:30}),new Ext.Panel({title:"面板2",height:30}),new Ext.Panel({title:"面板3",height:30})

]});

panel.render("hello");


上两处代码,前者不但省略掉了new Ext.Panel 这个构造函数,最重要前者只有在初始化TabPanel 的时候,才会创建子面板,而第二种方式则在程序一开始就会创建子面板。也就是说,前者实现的延迟加载。


2)         组件的配置属性

在ExtJS 中,除了一些特殊的组件或类以外,所有的组件在初始化的时候都可以在构造函数使用一个包含属性名称及值的对象,该对象中的信息也就是指组件的配置属性。

比如配置一个面板:

Var a=new Ext.Panel({

title:"面板",

html"面板内容",

height:100}

);

创建一个按钮: 

var b=new Ext.Button({

text:"添加",

pressed:true,

heigth:30,

handler:Ext.emptyFn

});

创建一个Viewport 及其中的内容: 

new Ext.Viewport({

layout:"border",

items:[{region:"north",

title:"面板",

html:"面板内容",

height:100},

{region:"center",

xtype:"grid",

title:"学生信息管理",

store:troe,

cm:colM,

store:store,

autoExpandColumn:3

}

]

});

每一个组件除了继承基类中的配置属性以外,还会根据需要增加自己的配置属性,另外子类中有的时候还会把父类的一些配置属性的含义及用途重新定义。

 

学习及使用ExtJS,其中最关键的是掌握ExtJS 中的各个组件的配置属性及具体的含义,这些配置属性在下载下来的ExtJS 源码文档中都有详细的说明,可以通过这个文档详细了解每一个组件的特性。

由于所有的组件都继承自Ext.Component,因此在这里我们列出组件基类Component 中的配置属性简单介绍。


配置属性 名称 类型简介

allowDomMove

Boolean

当渲染这个组件时是否允许移动Dom节点(默认值为true)。

applyTo

Mixed

混合参数,表示把该组件应用指定的对象。参数可以是—节点的id,一个DOM节点或一个存在的元素或与之相对应的在document中已出现的id。当使用applyTo,也可以提供一个id或CSS的class名称,如果子组件允许它将尝试创建一个。如果指写applyTo选项,所有传递到renderTo方法的值将被忽略,并且目标元素的父节点将自动指定为这个组件的容器。使用applyTo选项后,则不需要再调用render()方法来渲染组件。

autoShow

Boolean

自动显示,如为true,则组件将检查所有隐藏类型的class(如:”x-hidden”或”x-hide-display”并在渲染时移除(默认为false)。

cls

String

给组件添加额外的样式信息,(默认值为''),如果想自定义组件或它的子组件的样式,这个选项是非常有用的。

ctCls

String

给组件的容器添加额外的样式信息,默认值为'')。

disabled

Class

String 给被禁用的组件添加额外的CSS样式信息,(默认为"x-item-disabled")。

hideMode

String

组件的隐藏方式, 支持的值有”visibility” , 也就是css 里的visibility,”offsets”负数偏移位置的值和”display”也就是css里的display,默认值为”display”。

hideParent

Boolean

是否隐藏父容器,该值为true时将会显示或隐藏组件的容器,false时则只隐藏和显示组件本身(默认值为false)。

id

String

组件的id,默认为一个自动分配置的id。

listeners

Object

给对象配置多个事件监听器,在对象初始化会初始化这些监听器。

plugins

Object/Array

一个对象或数组,将用于增加组件的自定义功能。一个有效的组件插件必须包含一个init方法,该方法可以带一个Ext.Component类型参数。当组件建立后,如果该组件包含有效的插件,将调用每一个插件的init方法,把组件传递给插件,插件就能够实现对组件的方法调用及事件应用等,从而实现对组件功能的扩充。

renderTo

Mixed

混合数据参数,指定要渲染到节点的id,一个DOM的节点或一个已存在的容器。如果使用了这个配置选项,则组件的render()就不是必需的了。

stateEvents

Array

定义需要保存组件状态信息的事件。当指定的事件发生时,组件会保存它的状态(默认为none),其值为这个组件支持的任意event类型,包含组件自身的或自定义事件。(例如:[“click”,”customerchange”])。

stateId

String

组件的状态ID,状态管理器使用该id来管理组件的状态信息,默认值为组件的id。

style

String

给该组件的元素指定特定的样式信息,有效的参数为Ext.Element.applyStyles中的值。

xtype

String

指定所要创建组件的xtype,用于构造函数中没有意义。该参数用于在容器组件中创建创建子组件并延迟实例化和渲染时使用。如果是自定义的组件,则需要用Ext.ComponentMgr.registerType来进行注册,才会支持延迟实例化和渲染。

el

Mixed

相当于applyTo



ExtJS 提供了一套强大的事件处理机制,通过这些事件处理机制来响应用户的动作、监控控件状态变化、更新控件视图信息、与服务器进行交互等等。事件统一由Ext.EventManager 对象管理,与浏览器W3C 标准事件对象Event 相对应,Ext 封装了一个Ext.EventObject 事件对象。支持事件处理的类(或接口)为Ext.util.Observable,凡是继承该类的组件或类都支持往对象中添加事件处理及响应功能。

首先我们来看标准html 中的事件处理,看下面的html 代码:

<script>

function a() {

alert('some thing');

}

</script>

<input id="btnAlert" type="button" onclick="a();" value="alert框" />

点击这个按钮则会触发onclick 事件,并执行onclick 事件处理函数中指定的代码,这里直接执行函数a 中的代码,也即弹出一个简单的信息提示框。再简单修改一下上面的代码,

内容如下:

<script>

function a()

{

alert('some thing');

}

window.onload=function(){

document.getElementById("btnAlert").onclick=a;

}

</script>

<input id="btnAlert" type="button" value="alert框" />

上面的代码在文档加载的时候,就直接对btnAlert 的onclick 赋值,非常清晰的指明了

按钮btnAlert 的onclick 事件响应函数为a,注意这里a 后面不能使用括号”()”。


ExtJS 中组件的事件处理跟上面相似,看下面的代码:

<script>

function a(){

alert('some thing');

}

Ext.onReady(function(){

Ext.get("btnAlert").addListener("click",a);

});

</script>

<input id="btnAlert" type="button" value="alert" />

Ext.get("btnAlert")得到一个与页面中按钮btnAlert 关联的Ext.Element 对象,可以直接调用该对象上的addListener 方法来给对象添加事件,同样实现前面的效果。在调用addListener方法的代码中,第一个参数表示事件名称,第二个参数表示事件处理器或整个响应函数。

ExtJS 支持事件队列,可以往对象的某一个事件中添加多个事件响应函数,看下面的代码:

Ext.onReady(function(){

Ext.get("btnAlert").on("click",a);

Ext.get("btnAlert").on("click",a);

});

addLinster 方法的另外一个简写形式是on,由于调用了两次addListener 方法,因此当点击按钮的时候会弹出两次信息。

当然,ExtJS 还支持事件延迟处理或事件处理缓存等功能,比如下面的代码:

Ext.onReady(function(){

Ext.get("btnAlert").on("click",a,this,{delay:2000});

});

当然,在使用Ext 的事件时,我们一般是直接在控件上事件,每一个控件包含哪些事件,在什么时候触发,触发时传递的参数等,在ExtJS 项目的文档中都有较为详细的说明。比如对于所有的组件Component,都包含一个beforedestroy 事件,该事件会在Ext 销毁这一个组件时触发,如果事件响应函数返回false,则会取消组件的销毁操作。

Ext.onReady(function(){

var win=new Ext.Window({

title:"不能关闭的窗口", height:200, width:300

});

win.on("beforedestroy",function(obj){

alert("想关闭我,这是不可能的!");

obj.show();

return false;

});

win.show();});


由于在窗口对象的beforedestroy 事件响应函数返回值为false,因此执行这段程序,你会发现这个窗口将无法关闭。

组件的事件监听器可以直接在组件的配置属性中直接声明,如下面的代码与前面实现的功能一样:

Ext.onReady(function(){

var win=new Ext.Window({

title:"不能关闭的窗口",

height:200, width:300,

listeners:{"beforedestroy":function(obj){

alert("想关闭我,这是不可能的!");

obj.show(); return false;

}}

});

win.show();});

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,937评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,503评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,712评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,668评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,677评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,601评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,975评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,637评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,881评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,621评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,710评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,387评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,971评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,947评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,189评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,805评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,449评论 2 342

推荐阅读更多精彩内容