Extjs基础教程.docx

上传人:b****0 文档编号:12531959 上传时间:2023-04-20 格式:DOCX 页数:24 大小:421.34KB
下载 相关 举报
Extjs基础教程.docx_第1页
第1页 / 共24页
Extjs基础教程.docx_第2页
第2页 / 共24页
Extjs基础教程.docx_第3页
第3页 / 共24页
Extjs基础教程.docx_第4页
第4页 / 共24页
Extjs基础教程.docx_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

Extjs基础教程.docx

《Extjs基础教程.docx》由会员分享,可在线阅读,更多相关《Extjs基础教程.docx(24页珍藏版)》请在冰豆网上搜索。

Extjs基础教程.docx

Extjs基础教程

目录

1文档说明3

2词汇定义和图片:

4

Extjs:

XXXX4

可以贴图说明结构(可选)4

3章节14

3.1小章节:

5

3.2小章节5

A.子章节6

B.子章节6

 

1文档说明

本文档是针对Extjs的基础教程,主要内容为Extjs的概述及Extjs各种常用控件的使用.更适用于初学Extjs时使用。

2词汇定义和图片:

Extjs:

基于html/css+javascript的Ajax框架,主要用于创建前端用户界面。

Extjs是一个跨浏览器的应用,

RIA(RichInternetApplications):

富互联网应用,具有高度互动性、丰富用户体验以及功能强大的客户端。

MVC:

(ModelViewController)即把一个应用的输入、处理、输出流程按照Model、View、Controller的方式进行分离,这样一个应用被分成三个层——模型层、视图层、控制层

Ext的适配器:

Ext成型于YahooUI的Javascript库的扩展。

在当时,Ext须依赖YUI的底层代码来处理跨浏览器的问题。

现在ExtJS已经是独立、免依赖的库了(standalone),你可将Extjs替换为另外你所选择javascript库,如prototype、jQuery、或者是这些之中的最佳选择,->Ext自带的底层库。

负责将这些库(包括Ext自带的底层库)映射为Ext底层库的这部分代码,我们称之为适配器(Adapters)。

3javascript

在开始Extjs的学习前,我们先来了解一点javascrip的基础知识吧.

3.1数据格式之最最最基本的JSON

说到javasript,首先不得不提的就是json了,我们先来看看官方的解释吧。

JSON即JavaScriptObjectNatation,它是一种轻量级的数据交换格式,已经是javascript标准的一部分.对于WEB2.0来说,Json是目前最灵活的解决方案。

好了,官方的部分就先看到这里吧,了解了解就行了,下面我们来说JSON到底是什么样的吧。

上文有说到JSON是一种数据格式,它是怎么样的一种数据格式呢·?

学过JAVA的同学应该都知道MAP及Map灵活的键值对的数据格式。

Json同样也是一种键值对(Key-Value)的数据格式.key->string型数据,value可以是任何的数据类型,包括基本数据类型,如string,int,date,等.也可以是一个json,还可以是某个方法(函数).通过这样一种灵活的数据格式,我们可以在实际开发过程中利用json来组装各种各样的数据.如同java的bean一样,我们随时可以用json非常灵活,构造出我们想要的bean,我们想要的对象.来达到我们程序的需要。

所以,Javascrip是一种弱类型的语言.但他也是面向对象的。

3.2Javascript的类:

Javascrip与其他的面向对象语言如java,.net不同,它并不是基于类而是基于原型的。

Javascvipt的类其实也可以看作是json和函数的一个深度的运用.(个人理解,不代表官方言论.欢迎探讨)

在javascript创建一个类非常的容易:

//定义名为myClass的单例类

myClass=function{

//privatezone

varaVar=15,

//publiczone

returnaMethod:

function(){

alert("I'mamethodoftheobjectmyObject."+"aVar:

"+aVar);

}

}();

myClass.aMethod();

上述是一个全局的单例类的写法.只要myClass不使用var声明,那么这个类相对于整个有效范围内是全局的.(有效范围是指当前页面).Function(){}后面加()是使myClass成为一个单例类,在这里是闭包的一种实现。

包括使函数里定义的属性成为私有属性,不对外开发。

需要开放的属性与方法统统有return处定义。

如果我们需要多次使用同一种类对象(可以多例化的类),那就必须用到javascript特有的一种东西:

构造器函数和new关键字了.

使用构造器函数

在Javascript中没有专门的类的概念,但是构造器是存在的。

我们定义的function其实就可以看作是一个构造器,他构造了一类对象。

你可以编写一个函数,然后通过new关键字+这个函数来创建一个这种函数类型的对象。

该对象的属性及方法在函数内部定义.

//首先,我们为我们的类定义一个带一个参数的构造器

VarmyClass=function(config){

this.aVar=15;//定义默认的aVar属性;

this.aMethod=function(){

alert("I'mamethodoftheobjectmyObject.");

}

}

 

//创建类的实例

varA=newmyClass();

 

//显示15

alert(A.aVar);

 

//第二个实例

varB=newmyClass();

javascript的原型与方法共享:

你必须使用prototype对象:

//我们定义了一个prototype对象的一个方法

myClass.prototype.sharedMethod=function(){alert("I'masharedmethod")}

 

//显示我们的信息

A.sharedMethod();

 

//相同的信息

B.sharedMethod();

原型.prototype

JavaScript的所有function类型的对象都有一个prototype属性。

这个prototype属性本身又是一个object类型的对象,因此我们也可以给这个prototype对象添加任意的属性和方法。

prototype是对象的“原型”,由该函数构造出来的对象应该都会具有这个“原型”的特性。

事实上,在构造函数的prototype上定义的所有属性和方法,都是可以通过其构造的对象直接访问和调用的。

也可以说,prototype提供了一群同类对象共享属性和方法的机制

此外javascript的类还有几种其他不同的写法,以上两种写法为目前eVoice中常用的两种。

4Extjs概要

 ExtJS是一种用于在客户端创建丰富多彩的web应用程序界面,可以用来开发RIA的AJAX应用,是完全基于纯Html/CSS+JS技术的Ajax框架,提供了丰富的跨浏览器UI组件,灵活采用JSON/XML数据源开发,使得服务端表示层(VIEW)的负荷真正减轻,从而达到客户端的MVC应用。

4.1组件模型ComponentMode

首先我们看一下组件的结构图:

组件是指Extjs中各式各样的显式控件,eVoice中目前用到的主要有Grid,FormPanel,TreePanel,menu,tabPanel,button,toolbar,Window,MessageBox,ProgressBar,LoadMask各种form表单控件等等:

其中大部分继承于组件Componet类,少量继承于Object.

Component类是整个Extjs架构中的最基础的类之一.大部分的组件对象都继承于Component

组件对象为组件的创建,渲染,事件处理,状态管理和销毁提供了统一的模型。

我们构造的每一个组件都具备了由组件对象扩展出来的特性。

对于EXT中的组件对象,我们可以用Ext.getCmp(组件id)的方式获取。

以下是Ext2系列中组件对象的关键特性:

∙显式声明构建器链和重写Explicitconstructorchainingandoverriding

组件会将一个基础构造器连同配置传入到子类中。

函数initComponent用于提供制定的构造器逻辑,只要在继承链上的某一个子类实现便可,所有的组件都遵从此方式。

此时的子类就可在initComponent中对其设置相关的属性,实现具体的功能。

∙可调控的渲染Managedrendering

2.0中,每个组件都支持延时渲染(lazyrendering),又称按需渲染(on-demandrendering)。

渲染的调控是自动为你完好的。

即使如此,你亦可以通过的beforerender和render事件控制渲染发生、结束,达到最为灵活的自定义调控。

∙可调控的销毁Manageddestruction

每一个组件具有destroy的函数,当组件不再需要时,Ext就负责组件的结束调控,如自动垃圾回收和摧毁组件元素。

当然,销毁亦提供相应的事件,如beforedestroy和destroy可按照实际的情况作出逻辑处理。

∙管理声明自动化Automaticstatemanagement

组件内建设置和获取状态(State)的功能,只要是全局对象StateManager和一个状态Provider都初始化好,那么多数的组件都具有自动状态管理的能力。

∙组件常规行为的统一接口Consistentinterfaceforbasiccomponentbehavior

一般常规的行为如隐藏、显示和激活、禁用均是组件的基本特性。

如需要,这些都可由子类去重写或制定。

∙由组件管理器负责的可用调配AvailabilityviaComponentMgr

Ext的每一个组件在创建的时候就会由组件管理器登记注册,即你可随时获取任何组件,只需调用Ext.getCmp('id')。

支持插件Pluginsupport

现在任何的组件可以通过插件的形式来扩展了。

插件实质是带有init方法的一种类。

该方法会有一个单独的参数(类型为Ext.Component)传入到其中。

插件可通过组件的plugins配置项指定。

当组件创建时,如果有插件可用,组件就会调用每个插件上的init方法,传递自身的引用作为参数。

每个插件之后可调用方法或响应组件的事件以实现自身的功能。

4.1.1组件的生存周期ComponentLifeCycle

4.1.1.1初始化Initialization

1.配置项对象生效了

Theconfigobjectisapplied.

组件对象的构造器会把全部的配置项传入到其子类中去,并且进行下列所有的步骤。

2.组件的底层事件创建了

ThebaseComponenteventsarecreated

这些事件由组件对象负责触发。

事件有enable,disable,beforeshow,show,beforehide,hide,beforerender,render,beforedestroy,destroy(参阅ComponentAPI文档完整的内容)。

3.组件在组件管理器里登记了

ThecomponentisregisteredinComponentMgr

initComponent这方法总是使用在子类中,就其本身而论,该方法是一个模板方法(templatemethod),用于每个子类去现实任何所需的构造器逻辑(anyneededconstructorlogic)。

首先会创建类,然后组件对象各层次里面的每个类都应该调用superclass.initComponent。

通过该方法,就可方便地实现(implement),或重写(Override)任意一层构造器的逻辑。

4.状态感知进行初始化(如果有的话)

Stateisinitialized(ifapplicable)

如果组件是状态感知的,其状态会进行刷新。

5.加载好插件(如果有的话)

Pluginsareloaded(ifapplicable)

如果该组件有指定任何插件,这时便会初始化。

6.渲染好插件(如果有的话)

Thecomponentisrendered(ifapplicable)

如果指定了组件的renderTo或applyTo配置属性,那么渲染工作就会立即开始,否则会延时渲染,即等待到显式控制显示,或是其容器告知其显示的命令。

4.1.1.2渲染过程Rendering

1.触发beforerender事件Thebeforerendereventisfired

这是个可取消的事件,指定的handler可阻止组件进行渲染

2.设置好容器Thecontainerisset

如果没有指定一个容器,那么将使用位于DOM元素中组件的父节点作为容器。

3.调用onRender方法heonRendermethodiscalled

这是子类渲染最重要的一个步骤,由于该方法是一个模板方法(templatemethod),用于每个子类去现实任何所需的渲染逻辑(anyneededrenderlogic)。

首先会创建类,然后组件对象各层次里面的每个类都应调用superclass.onRender。

通过该方法,就可方便地实现(implement),或重写(Override)任意一层渲染的逻辑。

4.组件是“隐藏”状态的TheComponentis"unhidden"

默认下,许多组件是在CSS样式类如"x-hidden"设置隐藏的。

如果autoShow所配置的值为true,这时就不会有这个"hide"样式类作用在该组件上

5.自定义的类、样式生效了Customclassand/orstyleapplied

一切组件的子类都支持cls和style两种特殊的配置属性,分别用于指定用户自定义的CSS样式类和CSS规则。

推荐指定cls的方法来制定组件及其各部分的可视化设置。

由于该样式类会套用在组件makeup最外的一层元素,所以标准CSS规则会继承到组件下任何子元素的身上。

6.触发render事件Therendereventisfired

这是组件通知成功渲染的一个步骤。

这时,你可肯定认为组件的DOM元素已经是可用的了。

如果尝试在组件之前访问组件,会报告一个不可用的错误。

7.调用了afterRender方法TheafterRendermethodiscalled

这是另外一个实现或重写特定所需的“后渲染”逻辑的模板方法。

每个子类应调用superclass.afterRender.

8.组件被隐藏或禁用(如果有的话)TheComponentishiddenand/ordisabled(ifapplicable)

配置项hidden和disabled到这步生效

9.所有状态感知的事件初始化(如果有的话)Anystate-specificeventsareinitialized(ifapplicable)

状态感知的组件可由事件声明特殊加载和保存状态。

如支持,加入此类的事件。

4.1.1.3销毁过程Destruction

1.触发beforedesroy事件Thebeforedestroyeventisfired

这是个可取消的事件,指定的handler可阻止组件被销毁。

2.调用了beforeDestroy方法ThebeforeDestroymethodiscalled

这是另外一个实现或重写预定销毁逻辑的模板方法。

每个子类应调用superclass.beforeDestroy。

3.元素及其侦听器被移除Elementanditslistenersareremoved

若组件是渲染好的,所属的元素的事件侦听器会被移除和元素本身会从DOM那里移除。

4.调用了onDestroy方法TheonDestroymethodiscalled

这是另外一个实现或重写特定所需的“后销毁”逻辑的模板方法。

每个子类应调用superclass.onDestroy。

注意容器类(Containerclass,和一切容器的子类)提供了一个默认的onDestroy实现,自动遍历其items集合里的每一项,分别地执行子组件身上的destroy方法。

5.在组件管理器中撤销组件对象的登记ComponentisunregisteredfromComponentMgr

I使得不能再从Ext.getCmp获取组件对象

6.触发destroy事件Thedestroyeventisfired

这是组件成功销毁的一个简单通知。

此时组件已经DOM中已是没有的了

组件上的事件侦听器被移除EventlistenersontheComponentareremoved

组件本身可允许从所属的元素得到事件侦听器。

如有的话,连同删除。

4.1.2组件的X类型XTypes

XTypes是Ext2.0中新的概念,被认为是Ext组件的特定类型。

可用的xtype摘要可在Component类API开始的地方找到。

与一般JavaScript对象用法相似,XTypes可用于查找或比较组件对象,如isXType和getXType的方法。

你亦可以列出任意组件的xtpye层次表,用方法getXTypes。

然而,如何把Xtypes用于优化组件的创建和渲染过程才是XTypes发挥威力的地方。

通过指定一个xtype的配置对象的写法,可隐式声明的方式创建组件,使得如果没有渲染的需要就只是一个对象而免去实例化的步骤,这时不仅渲染的动作是延时的,而且创建实际对象的这一步也是延时的,从而节省了内存和资源。

在复杂的布局中,这种性能上的改进尤为明显。

//显式创建所容纳的组件

varpanel=newExt.Panel({

...

items:

[

newExt.Button({

text:

'OK'

})

]

};

 

//使用xtype创建

varpanel=newExt.Panel({

...

items:

[{

xtype:

'button',

text:

'OK'

}]

};

第一个例子中,面板初始化的同时,按钮总是会立即被创建的。

如果加入较多的组件,这种方法很可能界面的渲染速度。

第二例子中,按钮直到面板真正在浏览器上显示才会被创建和渲染。

如果面板从未显示(例如有个tab一直是隐藏的),那么按钮就不会被创建,不会消耗任何资源了。

4.1.3BoxComponent

BoxComponent是另外一个重要的基类,该类从组件Component扩展,为任何要进行可视渲染和参与布局的组件提供了一致的、跨浏览器的箱子模型(BoxModel)实现。

BoxComponent负责调节大小和定位,自动处理各浏览器之间的差异,如外/内补丁、边框的问题,形成一个统一的箱子模型,以支持各种浏览器。

2.0的一切容器类(container)扩展自BoxComponent

4.2容器模型ContainerMode

容器Container

一个组件如果有包含其它的组件,那么,容器Container便是这个组件奠基之石。

该类提供了布局方面和调节大小、嵌套组所需的逻辑,并且提供一个基础性的加入组件协调机制。

容器类不应该直接使用,其目的在于为一切可视的容器组件提供一个基类。

面板Panel

面板Panel是2.0最常用的容器,90%布局任务都离不开面板。

面板用在排版布局上,如同一张白纸,完全是空白的矩形,没有可视内容。

虽然这样,面板也提供了一些预留区域,方便加入程序所需的UI界面,包括顶部或底部的工具条、菜单栏、头部区域、底部区域和躯干区域。

同时内建可展开和可收缩行为的按钮,和其它不同任务预设的按钮。

面板可轻松地下降到任意的容器或布局,当中定位或渲染的逻辑全部由Ext调控,

下列是Ext2.0面板最主要的几个子类:

GridPanel

TabPanel

TreePanel

FormPanel

Window

Window是一种可浮动的、可最小/最大化的、可复原的、可拖动的..等此类的特殊面板。

其目的在于实现一种具有桌面风格的程序界面的基类,像Ext桌面演示看到的那样。

视图区Viewport

视图区Viewport是以document.body作容器的实用类,它会与浏览器视图自适应尺寸,是全屏幕应用的基础,如浏览器大小调节、布局重新计算的问题由该类自动完成。

注意视见区Viewport除了document.body不能渲染在其它的容器上,所以一个页面只能有一个视图区。

目前eVoice中主页的主容器即为此容器。

4.3布局Layouts

布局概述

Ext2.3LayoutClassHierarchy

布局是Ext2系列中最具意义的改进之一,在创建优雅的程序布局时感受到易用性或灵活性方面带来的好处,共有10种风格的布局管理器,分别提供构建各种可能的程序布局基础。

Ext调控了布局诸如size、定位、滚动条和其他的属性方面的问题,一如既往地简单,开箱即用。

在容器也可无限嵌套布局、混合其他不同风格的布局。

布局由容器内置创建,所以布局不应通过关键字new实例化这种方式直接使用。

有一种内部的机制,容器与布局能够很好地协调工作—只需配置好相关的参数,容器就会委托其负责的布局类工作。

创建容器的时候,你应选定一种布局的风格以及相关的配置,这两个配置是属性layout和属性layoutConfig。

举例:

varpanel=newPanel({

title:

'MyAccordion',

layout:

'accordion',//在这个面板中所使用的布局样式

layoutConfig:

{

animate:

true//布局指定的配置项写在这里

}

//其他Panel的选项

});

当你创建嵌套布局时,明白面板包含其他面板是很重要的,布局中的每个面板必须指定一个布局管理器。

多数情况你不需要指定布局的风格如“border”或“accordion”,较常见的是“fit”那一种,会自动调整大小自适应它的容器。

如果你不指定某个布局管理器,默认的是ContainerLayout类,不过这样很可能导致一些意料不到的情况发生,所以最好精确声明一下。

每种布局类都支持其特定的配置选项。

关于布局每种配置选项可参考API文档。

布局管理器LayoutManagers

ContainerLayout

其它一切布局管理器的基类,容器若不指定某个布局管理器,则默认的管理器就是这个ContainerLayout。

ContainerLayout没有任何的外观表示—其主要的职责是容纳子项目、控制渲染和一些常见任务,如调节大小缓冲(resizebuffering)。

ContainerLayout常用于扩展制定的布局,很少实例化直接使用。

详细在API参考.

CardLayout

CardLayout将容器中的每个组件当作一个卡片来处理。

在某一时间,只有一个卡片是可见的,容器象一个卡片堆栈一样工作。

大多数的情况,用于向导(Wizards),制定的tab实现或其它多页面信息的场合。

参阅API参考。

AbsoluteLay

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 文学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1