`
unifly
  • 浏览: 55566 次
  • 性别: Icon_minigender_1
  • 来自: yantai
社区版块
存档分类
最新评论

[翻译]Ext组件扩展概述

    博客分类:
  • Ext
阅读更多

心血来潮,翻译了一篇extjs上的教程,希望大家批评指正,呵呵……

原文链接:http://extjs.com/learn/Manual:Component:Extending_Ext_Components

Manual:Component:Extending Ext Components(Chinese)

From Learn About the Ext JavaScript Library

Jump to: navigation , search
<!---->
Summary: 本文概述了如何扩展Ext中的组件并介绍了许多来自于Ext社区成员很好的文章。
Author: Patrick Donelan (译者:unifly )
Published: 2008-04-16
Ext Version: 2.0
Languages: en.png English cn.png Chinese

Contents

[hide ]
<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#RenderingExt_2_Overview#Destruction 中的步骤描述所解释的实现,将对你了解Ext如何运行很有启发。

现在,既然本文是关于扩展Ext.Component的,主要关注的方法应是initComponent() ,在the Component Life Cycle (组件生命周期)中扮演了首要角色,在你掌握了initComponent() 后,你可以继续研究其他重要的方法,如onRender() ,使你能够扩展Ext_2_Overview#RenderingonDestroy() 用来扩展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给我们带来了什么!

分享到:
评论
4 楼 sp42 2008-05-28  
能放出来大致都没什么差错了, 顺便也将连接换咱中文的 呵
3 楼 unifly 2008-05-28  
多谢楼上两位捧场,感觉有些地方翻的有些生涩,俺语文不好,希望大家帮忙找找毛病,然后再考虑放到官网上,嘿嘿……
2 楼 hanjiangit 2008-05-28  
不错哦   不知道什么时候才能看到Ext的中问译本API。。。。渴望
1 楼 KKFC 2008-05-28  
不错 赞一个 怎么还不让ext官网上面看到我们的国旗小logo?

相关推荐

    Ext官方中文教程(可打包下载)

    扩展Ext中的组件 扩展与插件之间的区别 扩展Ext的新手教程 Ext的类继承 从源码生成Ext 基础用法: DomQuery基础 Ext中的事件 简述模板 模板(Templates)的函数 教你创建Ext UI控件 事件的处理 Ext中的继承 Ext...

    Ext 学习中文手册

    扩展EXT组件 29 文件的创建 30 Let's go 33 完成 35 EXT的布局(Layout) 37 简单的例子 38 加入内容 42 开始使用Grid 51 步骤一 定义数据(Data Definition) 51 步骤二 列模型(Column Model) 52 Grid组件的简易...

    Ext Js权威指南(.zip.001

    8.4.1 组件管理及查询:ext.componentmanager与ext.componentquery / 423 8.4.2 焦点管理:ext.focusmanager / 424 8.4.3 z-order管理:ext.zindexmanager与ext.windowmanager / 425 8.4.4 状态管理:ext.state....

    EXT简体中文参考手册(PDF&CHM电子档)

    扩展EXT组件 29 文件的创建 30 Let's go 33 完成 35 EXT的布局(Layout) 37 简单的例子 38 加入内容 42 开始使用Grid 51 步骤一 定义数据(Data Definition) 51 步骤二 列模型(Column Model) 52 Grid组件的简易...

    EXT 中文帮助手册

    19 重写公共变量 21 重写(Overriding)公共函数 21 DomQuery基础 22 DomQuery基础 22 扩展EXT组件 29 文件的创建 30 Let's go 33 完成 35 EXT的布局(Layout) 37 简单的例子 38...

    .net EXT学习资料与源码

    [编辑本段]概述  在软件体系架构设计中,分层式结构是最常见,也是最重要的一种结构。微软推荐的分层式结构一般分为三层,从下至上分别为:数据访问层、业务逻辑层(又或成为领域层)、表示层。  三层结构原理: ...

    EXT 中文手册

    19 重写公共变量 21 重写(Overriding)公共函数 21 DomQuery基础 22 DomQuery基础 22 扩展EXT组件 29 文件的创建 30 Let's go 33 完成 35 EXT的布局(Layout) 37 简单的例子 38...

    extJs 2.1学习笔记

    3. Ext.form概述 4 4. Ext.TabPanel篇 5 5. Function扩展篇 7 6. Ext.data.Store篇 10 7. Ext.data.JsonReader篇一 12 8. Ext.data.JsonReader篇二 15 9. Ext.data.HttpProxy篇 19 10. Ext.data.Connection篇一 20 ...

    精通JS脚本之ExtJS框架.part1.rar

    本书共分17章,分别介绍了JavaScript的对象编程、JavaScript浏览器对象模型和事件机制、ExtJS的核心类库和组件、ExtJS的事件处理方式、设计进度条、设计工具栏和菜单栏、设计面板、设计表格、设计表单、设计数据表、...

    深入浅出Ext JS(第2版).part1.rar

    紧接着对ExtJS的事件、核心组件、表格和表单等各种控件、树形结构、拖放、弹出窗口、布局、数据存储和传输、实用工具和扩展等进行了详细讲解,最后一个完整的EXT应用结束全书。每个知识点都配有相应的示例,可操作性...

    ExtJs学习笔记,共30讲

    3. Ext.form概述 4 4. Ext.TabPanel篇 5 5. Function扩展篇 7 6. Ext.data.Store篇 10 7. Ext.data.JsonReader篇一 12 8. Ext.data.JsonReader篇二 15 9. Ext.data.HttpProxy篇 19 10. Ext.data.Connection篇一 20 ...

    精通JS脚本之ExtJS框架.part2.rar

    本书共分17章,分别介绍了JavaScript的对象编程、JavaScript浏览器对象模型和事件机制、ExtJS的核心类库和组件、ExtJS的事件处理方式、设计进度条、设计工具栏和菜单栏、设计面板、设计表格、设计表单、设计数据表、...

    轻松搞定Extjs_原创

    第二十二章:GridPanel扩展 158 一、学会自学吧,朋友 158 二、带摘要的GridPanel 158 三、RowExpander 162 四、分组GridPanel 165 五、将带摘要的GridPanel和分组GridPanel合二为一 168 六、小结 171 第二十三章:...

    ExtJS自定义主题(theme)样式详解

    本文基于Ext JS 4.2.1版本UI组件基础学习ExtJS就是学习组件的使用。ExtJS4对框架进行了重构,其中最重要的就是形成了一个...Sass和Compass概述SassSass样式表语言是CSS的一个扩展,为CSS提供了变量、内嵌规则、混入

    log4Net详解(共2讲)

    3、全面介绍了Ext UI及相关组件,Ext扩展、流行插件; 4、详尽演示FireFox中ExtJs的调试及VS2008中javascript的调试方法; 5、了解ExtJs代码的混淆、加密与优化; 6、了解大型实际商业OA项目流程及实战如何使用Ext...

    asio-extensions:在(Boost。)Asio之上构建的附加功能

    Asio扩展( AsioExt ) AsioExt是在(Boost。)Asio上构建的各种组件和功能的集合。 它与独立的Asio以及Boost版本兼容。功能概述文件系统: 文件句柄类型支持: Asio的*Stream概念( SyncReadStream , ...

    WebRTC:Sencha Tools的WebRTC演示

    由OpenTok和 Ext JS 6框架支持的的简单演示。 概述 因此,您想进行对等音频... Ext JS不仅提供“响应式”,而且还提供“响应架构的许多组件。 注意:此演示中没有React式系统的所有组件。 此演示示例需要提供者提供一

    JAVA_API1.6文档(中文)

    java.nio 定义作为数据容器的缓冲区,并提供其他 NIO 包的概述。 java.nio.channels 定义了各种通道,这些通道表示到能够执行 I/O 操作的实体(如文件和套接字)的连接;定义了用于多路复用的、非阻塞 I/O 操作的...

    [Java参考文档]

    java.nio 定义作为数据容器的缓冲区,并提供其他 NIO 包的概述。 java.nio.channels 定义了各种通道,这些通道表示到能够执行 I/O 操作的实体(如文件和套接字)的连接;定义了用于多路复用的、非阻塞 I/O 操作的...

Global site tag (gtag.js) - Google Analytics