心血来潮,翻译了一篇extjs上的教程,希望大家批评指正,呵呵……
原文链接:http://extjs.com/learn/Manual:Component:Extending_Ext_Components
Manual:Component:Extending Ext Components(Chinese)
From Learn About the Ext JavaScript Library
<!---->
Summary:
本文概述了如何扩展Ext中的组件并介绍了许多来自于Ext社区成员很好的文章。 |
Author:
Patrick Donelan
(译者:unifly
) |
Published:
2008-04-16 |
Ext Version:
2.0 |
Languages:
English
Chinese
|
<script type="text/javascript"></script>
引言
起初,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给我们带来了什么!
分享到:
相关推荐
### Ext组件概述与初学者指南 #### 一、Ext组件概览 Ext是一个功能丰富的JavaScript框架,用于构建桌面级Web应用程序。它提供了大量的组件和工具,使得开发者能够快速且高效地构建用户界面。对于初学者而言,理解...
### Ext组件概述与详解 #### 一、Ext基础组件 **1.1 Box Component (Ext.BoxComponent)** - **xtype**: `box` - **功能描述**:Box Component 是一个非常基本的 Ext 组件,主要用于定义具有边框和其他布局属性的...
《Ext 4 概述与核心特性》 Ext 4 是一个革命性的Web应用程序开发框架,它对Ext 3进行了大幅度的改进和升级。几乎所有的组件和子系统都得到了优化,为开发者带来了全新的体验。在向Ext 4过渡的过程中,开发者需要...
- 构建组件:根据需求创建各种EXT组件,并设置其属性。 - 添加事件监听:通过事件监听实现组件间的交互。 - 初始化应用:使用Ext.onReady或Ext.application启动应用。 5. EXT的响应式设计 EXT还支持响应式布局,...
扩展Ext中的组件 扩展与插件之间的区别 扩展Ext的新手教程 Ext的类继承 从源码生成Ext 基础用法: DomQuery基础 Ext中的事件 简述模板 模板(Templates)的函数 教你创建Ext UI控件 事件的处理 Ext中的继承 Ext...
- **扩展EXT组件** 开发者可以通过继承EXT提供的组件基类,定制出符合自己需求的组件,增加或修改功能。 - **EXT的布局(Layout)** EXT提供了多种布局方式,如CardLayout、BorderLayout等,用于控制组件在页面...
1. **组件模型 (Component Model)**: 在EXT2.0中,Component和BoxComponent类得到了深度整合,成为所有主要组件的基础。组件生命周期的管理更加完善,使得创建和管理UI组件变得更加容易。开发者可以通过理解和利用...
标题中的“Ext扩展整理后吐血奉献”表明这是一篇关于ExtJS框架的深入解析文章,作者可能在其中分享了自己研究ExtJS扩展组件的心得体会。ExtJS是一个基于JavaScript的开源富因特网应用程序框架,用于构建桌面和移动...
- **Ext2 概述**:提供了 Ext2 版本的主要特性和新组件的介绍。 - **组件模型**:解释了 Ext 中的组件模型,包括基本组件和容器。 - **容器模型**:详细介绍了容器组件的作用和用法。 - **布局 Layouts**:列举了...
- **Let's go**: 提供了一个简单的示例,展示如何扩展现有的EXT组件。 - **完成**: 总结了扩展EXT组件的过程。 #### 8. EXT的布局(Layout) - **简单的例子**: 展示了如何使用EXT的布局管理器来组织UI元素。 - **...
以下是简单的EXT4表格分页实例代码概述: ```javascript // 数据模型定义 Ext.define('MyApp.model.MyModel', { extend: 'Ext.data.Model', fields: ['id', 'name', 'date'] }); // 数据存储配置 var store = ...
1. **基础对象**:EXT中的所有对象都继承自Ext.Base,这个基类定义了EXT对象的基本行为,如事件处理、属性管理和扩展机制等。 2. **类系统**:EXT使用面向对象的编程方式,"ext-base.js"中包含了类的创建、继承和...
Grid组件是EXT JS中用于展示大量表格数据的核心组件。它支持数据分页、排序、过滤和编辑,适用于构建数据密集型应用。 **十二、Menu组件** Menu组件用于创建下拉菜单和上下文菜单,支持多种Item类型,如普通菜单项...
DomQuery基础与EXT组件扩展 `DomQuery`是EXT提供的一个用于操作DOM的强大工具,它类似于jQuery,但专门针对EXT进行了优化。掌握`DomQuery`的基础用法对于高效开发EXT应用至关重要。此外,扩展EXT组件也是开发中...
1. EXT概述: EXT是一个用于构建富客户端Web应用的JavaScript库,由Sencha公司开发。它提供了一套完整的UI组件,包括表格、树形视图、表格面板、表单、菜单、工具栏等,使得开发者可以快速构建出交互性强、用户体验...
#### 扩展EXT组件 ExtJS允许开发者扩展现有的组件,以满足特定的需求。这通常是通过覆盖现有组件的方法或属性来实现的。例如,可以通过继承一个现有组件,并在其基础上添加新的功能: ```javascript Ext.define('...
- 响应事件:EXT通过事件监听机制实现了组件间的交互,你可以为任何EXT组件添加事件监听器,响应用户的操作。 - 使用Widgets:Widget是EXT中可复用的UI组件,如按钮、菜单、日历等,它们都有自己的属性、方法和事件...
1. **Ext.NET框架概述** Ext.NET是一个开源项目,它允许.NET开发者使用ASP.NET Web Forms技术创建具有桌面应用级别的交互性和用户体验的Web应用程序。3.2版本是该框架的一个稳定版本,引入了多项新功能和改进。 2....