引言
起初,Ext.extend()干的不错,它使你能够建立强大的面向对象的JavaScript类层次结构。你可以用它构建你自己的类和派生类,当然也可以扩展Ext的内建类。如果不熟悉Ext.extend(),你应该先读一下Manual:Intro:Inheritance。
Jozef Sakalos写的Tutorial:Extending_Ext_Class详细介绍了怎样在Ext1.X下实现继承。因为自建的构造函数在Ext2.X下仍能够工作,而且毫无疑问你将会遇到2.X之前构造方式的代码,所以本文还是很值得一读的。
Ext.Component
大多数Ext窗口小部件(如Form elements, Panels, Toolbars, ..)继承自Ext.Component(那些没有继承的将在Ext3中实现继承)。
预配置类
最简单的扩展Ext.Component的方式(或者任何继承自它的类)就是延续Ext1.X中利用Ext.extend()的做法。然而还有个差别,就是你不需要定义自己的构造函数(构造函数将由initComponent()来处理,文章后面将会讲到)。如果你所需的是定义一些自己的缺省类来重用(指的是这里和ExtJS社区作为预配置类),所有你所需要做的就是:
//定义组件Ext.some.component的预配置类MyComponent
MyComponent = Ext.extend(Ext.some.component, {
myDefault1: '..',
myDefault2: '..'
});
//注册成xtype以便延迟加载
Ext.reg('mycomponentxtype', MyComponent);
在以上示例中,Ext.extend()中的第二个参数对象包含的自定义参数可覆盖Ext.some.component中已经支持的缺省参数。
以上示例看上去较简单,但能够让你从程序中重构除去相当数量重复的代码,并生成可重用的对象。举个例子,你可以用预配置选项创建一个Ext.some.component的实例,代码如下:
var myComponent = new MyComponent();
或者通过你注册过的Component XType延迟加载,下面示例作为Panel的组件项:
{..
items: [ {xtype: 'mycomponentxtype'} ]
..}
扩展Ext.Component
好的,虽然预配置类很有用,但是目前为止我们还没有添加任何其他的功能给继承类。我们需要覆盖一些方法来实现。这是Ext2.X精彩的地方。
Ext.Component源自1.x,但是在2.x中,它得到了扩展和加强,使它成为了整个架构中最基础的类。现在组件提供统一的组件创建、渲染、事件处理、状态维护、销毁模型,而且Ext中的每个组件,凡是需要这些特性的现在都扩展自Component。Ext_2_Overview#Component_Model。
你应该好好的学习下上面的 Ext_2_Overview,文章详细描述了组件的方方面面。当你一行行的跟踪Ext.Component中的源代码(在ExtJS的src目录下的widgets子目录下的Component.js中),你会明白the Component Life Cycle, Ext_2_Overview#Rendering和Ext_2_Overview#Destruction中的步骤描述所解释的实现,将对你了解Ext如何运行很有启发。
现在,既然本文是关于扩展Ext.Component的,主要关注的方法应是initComponent(),在the Component Life Cycle(组件生命周期)中扮演了首要角色,在你掌握了initComponent() 后,你可以继续研究其他重要的方法,如onRender(),使你能够扩展Ext_2_Overview#Rendering,onDestroy() 用来扩展Ext_2_Overview#Destruction,在这方面,我会指出一些由Ext社区成员写的非常好的文档。
Jozef Sakalos写的Tutorial:Writing_a_Big_Application_in_Ext是个非常不错的教程,它教你使用新的组件继承模型,并解释了为什么组件继承模型无疑是构建优良程序的好的基础。
还有由 Jozef Sakalos写的Tutorial:Extending_Ext2_Class,也提供了实际的例子来讲解(mjlecomte的帖子提供了该例子的建议版本)。
一个可重用模板
下面的模板(基于Jozef Sakalos在mjlecomte's帖子中的回复)可作为扩展Ext.Component的起点。
MyComponent = Ext.extend(Ext.some.component, {
//缺省构造参数,可被自定义设置覆盖
propA: 1,
initComponent: function(){
//在组件初始化期间调用的代码
//因为配置对象应用到了“this”,所以属性可以在这里被覆盖,或者添加新的属性
//(如items,tools,buttons)
Ext.apply(this, {
propA: 3
});
//调用父类代码之前
//调用父类构造函数(必须)
MyComponent.superclass.initComponent.apply(this, arguments);
//调用父类代码之后
//如:设置事件处理和渲染组件
},
//覆盖其他父类方法
onRender: function(){
//调用父类代码之前
//调用父类相应方法(必须)
MyScope.superclass.onRender.apply(this, arguments);
//调用父类代码之后
}
});
//注册成xtype以便能够延迟加载
Ext.reg('mycomponentxtype', MyComponent);
上面是一个启发例子,如果你用以下任意例子创建以上代码的实例 :
var myComponent = new MyComponent({
propA: 2
});
//或者延迟加载:
{..
items: {xtype: 'mycomponentxtype', propA: 2}
..}
属性propA将被设置3次,按顺序分别是1,2,3 。通过跟踪代码(和注释) ,你会发现初始值为1(构造缺省),然后通过用户配置对象设置为2,最后在initComponent方法中被覆盖设置成3.希望这个例子能让你稍微明白代码执行的顺序(而不是按照你读代码的顺序!)。
因为组件是其他组件的基础,所以下面代码是获取基础组件快捷方法。
var topCmp = (function(o){while(o.ownerCt){o=o.ownerCt} return o;})(this);
结束语
本文主要关注于initComponent()方法及其在the Component Life Cycle中的角色。一旦你掌握了它,就该研究Ext_2_Overview#Component_Model列出的Ext组件模型的其他方面(如管理渲染、状态管理、插件等)。非常感谢Jozef Sakalos,他发表了很好的关于扩展组件方面的帖子和教程,当然还要感谢Jack和Ext团队给我们提供了如此棒的框架,迫不及待想看看Ext3给我们带来了什么!
<!--
NewPP limit report
Preprocessor node count: 107/1000000
Post-expand include size: 1782/2097152 bytes
Template argument size: 1188/2097152 bytes
Expensive parser function count: 0/100
--><!-- Saved in parser cache with key ext_learn:pcache:idhash:828-0!1!0!!en!2!edit=0 and timestamp 20110419084925 -->
分享到:
相关推荐
Container是Ext中用于组织和管理其他组件的通用容器。它可以嵌套其他容器或组件,并应用不同的布局策略。 ##### 5. **DataView(数据视图)** DataView组件用于展示数据集,支持各种数据绑定和动态更新机制。它...
Ext组件扩展包 - DateTime 是一个专门用于增强JavaScript应用程序中日期和时间处理能力的工具集。在Web开发中,尤其在创建交互式用户界面时,日期和时间选择器是不可或缺的一部分。此扩展包提供了美观且功能丰富的...
这个"Ext2.0.2经典的一个JS组件带EXT中文手册.rar"文件包含了该版本的ExtJS组件和相关的中文文档,帮助开发者更好地理解和使用这个框架。 1. **EXT中文手册**: 提供的`EXT 中文手册.doc`是ExtJS的中文文档,这...
EXT是一个流行的JavaScript库,主要用于构建富客户端应用程序,而EXT上传组件是EXT库的一个扩展,它使得在EXT应用中集成文件上传变得更加简单。 SwfUploadPanel.css、SwfUpload.js以及SwfUploadPanel.js是EXT上传...
环境:Windows XP sp3、Tomcat 6.0、IE 7、MyEclipse 5.5、Ext 3.2 使用步骤: 1、下载解压之后,使用IDE导入工程 2、发布到Web服务器、并且启动服务器 3、打开IE之后在地址输入:...
### Ext组件概述与详解 #### 一、Ext基础组件 **1.1 Box Component (Ext.BoxComponent)** - **xtype**: `box` - **功能描述**:Box Component 是一个非常基本的 Ext 组件,主要用于定义具有边框和其他布局属性的...
2. **DataReader类**:EXT中的DataReader类是数据绑定的关键部分,负责从各种数据源解析数据并转化为EXT可以理解的格式。7WX扩展类对这个类进行了扩展,意味着现在它能够解析和处理7WX格式的数据,使得EXT应用可以...
- 插件是ExtJS中扩展组件功能的一种方式,允许开发者添加自定义行为或功能到现有的组件上。 - 开发插件通常涉及创建一个新的JavaScript文件,定义一个类并扩展自`Ext.util.Plugin`或`Ext.grid.Panel`等特定组件的...
Ext编辑组件是基于ExtJS框架的一个扩展库,它为开发者提供了更加便捷的方式来创建和管理界面中的可编辑元素。ExtJS是一个强大的JavaScript库,用于构建富客户端的Web应用程序,尤其适用于构建数据驱动、交互性强的...
扩展Ext中的组件 扩展与插件之间的区别 扩展Ext的新手教程 Ext的类继承 从源码生成Ext 基础用法: DomQuery基础 Ext中的事件 简述模板 模板(Templates)的函数 教你创建Ext UI控件 事件的处理 Ext中的继承 Ext...
标题中的“UI组件(ext jquery ucren)”提及了三个关键词:EXT、jQuery和ucren,这些都是在Web开发中常见的UI(用户界面)组件库。接下来,我们将详细探讨这三个技术及其在构建用户界面中的作用。 EXT是一个强大的...
"Ext2.0 文件上传组件"是一个用于Web应用程序的组件,它允许用户在浏览器中方便地上传文件。这个组件基于Ext JavaScript库的2.0版本,Ext是一个强大的前端开发框架,提供了丰富的用户界面组件和数据管理功能。在本文...
本文将围绕"yui的扩展ext.rar"这一主题,详细解析EXT在UI设计和Ajax应用中的核心知识点。 1. EXT概述 EXT基于YUI构建,提供了一套完整的前端框架,包括数据管理、组件系统、布局管理、表单元素等。EXT的主要特点是...
Ext2.0提供了多种布局模式,如Fit布局、Table布局、Form布局、Border布局等,用于控制组件在容器中的排列方式,使得页面元素能够适应不同屏幕尺寸和分辨率。 3. **数据绑定**: 它支持数据模型(Model)、数据...
Ext、Ext4中各个组件、属性、方法详解,一个不漏;Ext学习入门及参考最好的资料
EXT Color Change Component,即EXT颜色改变组件,是EXT库中一个用于处理颜色选择和展示的UI组件,它提供了用户友好的界面,使得用户可以在应用中方便地更改颜色。 在EXT框架中,组件是构建用户界面的基本单元,...
在本案例中,"Flash 表单上传组件"是 EXT 扩展中用于实现文件上传功能的一个特殊模块,它利用 Adobe Flash 技术来处理大文件上传和多文件同时上传,解决了传统 HTML 表单上传的限制。 1. **EXTJS 框架基础**:EXTJS...
这个组件扩展了EXTJS的原生下拉框(ComboBox)功能,增加了多选特性,使得用户可以在下拉菜单中选择多个选项。 EXTJS的ComboBox通常是一个单选下拉列表,用户只能从预定义的选项中选择一个。然而,"multicombo"组件...
EXT 自定义控件扩展是EXT框架中的一个重要特性,它允许开发者根据项目需求创建具有特定功能或界面风格的自定义组件。EXT是一个强大的JavaScript库,主要用于构建富客户端的Web应用程序,其核心理念是提供一套完整的...
本篇将重点讲解ExtJS中的一个扩展组件——多选下拉框,即“combobox”。 在ExtJS中,ComboBox是一个基本的输入组件,它结合了文本输入框和下拉列表的功能。默认情况下,ComboBox只允许用户选择一个选项。但是,通过...