`

Ext 10分钟快速起步

阅读更多

无论你是Ext库的新手,抑或是想了解Ext的人,本篇文章的内容都适合你。本文将简单地介绍Ext的几个基本概念,和如何快速地做出一个动态的页面并运行起来,假设读者已具备了一些JavaScript经验和初级了解HTML Dom。否则的话,请从阅读 初学JavaScript资源开始。

下载Ext

如果你未曾下载过,那应从这里下载最新版本的Ext http://extjs.com/downloads

针对你的下载需求,有几个不同的弹性选项。通常地,最稳定的版本,是较多人的选择。下载解包后,那个example文件夹便是一个探索Ext的好地方!
开始!

Download Example File

我们将使用Ext,来完成一些JavaScript任务。

Zip文件包括三个文件:ExtStart.html, ExtStart.jsExtStart.css。解包这三个文件到Ext的安装目录中(例如,Ext是在“C:\code\Ext\v1.0”中,那应该在"v1.0"里面新建目录“tutorial”。双击ExtStart.htm,接着你的浏览器打开启动页面,应该会有一条消息告诉你配置已完毕。如果是一个Javascript错误,请按照页面上的指引操作。

在你常用的IDE中或文本编辑器中,打开ExtStart.js看看:

Ext.onReady可能是你接触的第一个方法。这个方法是指当前DOM加载完毕后,保证页面内的所有元素能被Script引用(reference)。你可删除alert()那行,加入一些实际用途的代码试试:

  1. Ext.onReady(function() {   
  2.     alert("Congratulations!  You have Ext configured correctly!");   
  3. });  
Element:Ext的核心

大多数的JavaScript操作都需要获取页面上的某个元素(reference),好让你来做有趣的事情。传统的JavaScript方法,是通过ID获取Dom节点的:

  1. var myDiv = document.getElementById('myDiv');  

这毫无问题,不过这样单单返回一个对象(DOM节点),用起来并不是太强大和好用。为了要用那节点干点事情,你将会要写不少自定义的代码;另外,对于不同类型浏览器之间的差异,要你处理起来可真头大了。

进入Ext.element 对象。元素(element)的的确确是Ext的心脏地带,--无论是访问元素(elements)还是完成一些动作,都要涉及它。Element的API是整个Ext库的基础,如果你时间不多,只想了解Ext中的一个类的话,Element一定是首选!

由ID获取一个Ext Element如下(首页ExtStart.htm包含一个div,ID名字为“myDiv”,然后,在ExtStart.js中加入下列语句):

  1. Ext.onReady(function() {var myDiv = Ext.get('myDiv');});  

再回头看看Element对象,发现什么有趣的东东呢?

  • Element包含了常见的DOM方法和属性,提供一个快捷的、统一的、跨浏览器的接口(若使用Element.dom的话,就可以直接访问底层DOM的节点。);
  • Element.get()方法内置缓存处理(Cache),多次访问同一对象效率上有极大优势;
  • 内置常用的DOM节点的动作,并且是跨浏览器的定位的位置、大小、动画、拖放等等(add/remove CSS classes, add/remove event handlers, positioning, sizing, animation, drag/drop)。

这意味着你可用少量的代码来做各种各样的事情,这里仅仅是一个简单的例子(完整的列表在ElementAPI中)。

继续在ExtStart.js中,在刚才我们获取好myDiv的位置中加入:

  1. myDiv.highlight();      //黄色高亮显示然后渐退   
  2. myDiv.addClass('red');  // 添加自定义CSS类 (在ExtStart.css定义)   
  3. myDiv.center();         //在视图中将元素居中   
  4. myDiv.setOpacity(.25);  // 使元素半透明  
获取多个DOM的节点

通常情况下,不能由ID获取多个DOM的节点,有可能因为没设置ID,或者你不知道ID,又或者直接用ID方式引用有太多元素了。这种情况下,你会不用ID来作为获取元素的依据,可能会用属性(attribute)或CSS Classname代替。基于以上的原因,Ext引入了一个功能异常强大的Dom Selector库,叫做DomQuery。

DomQuery可作为单独的库使用,但常用于Ext,你可以在上下文环境中(Context)获取多个元素,然后通过Element接口调用。幸运的是,Element对象本身便有Element.selcect的方法来实现查询,即内部调用DomQuery选取元素。这个简单的例子中,ExtStart.htm包含若干段落(

标签),没有一个是有ID的,而你想轻松地通过一次操作马上获取每一段,全体执行它们的动作,可以这样做:

  1. // 每段高亮显示   
  2. Ext.select('p').highlight();  

DomQuery的选取参数是一段较长的数组,其中包括W3C CSS3 Dom选取器、基本XPatch、HTML属性和更多,请参阅DomQuery API文档以了解这功能强大的库的细节。

响应事件

到这范例为止,我们所写的代码都是放在onReady中,即当页面加载后总会立即执行,功能较单一——这样的话,你便知道,如何响应某个动作或事件来执行你希望做的事情,做法是,先分配一个function,再定义一个event handler事件处理器来响应。我们由这个简单的范例开始,打开ExtStart.htm,编辑下列的代码:

  1. Ext.onReady(function() {   
  2.     Ext.get('myButton').on('click', function(){   
  3.         alert('You clicked the button');   
  4.     });   
  5. });  

加载好页面,代码依然会执行,不过区别是,包含alert()的function是已定义好的,但它不会立即地被执行,是分配到按钮的单击事件中。用浅显的文字解释,就是:获取ID为'myDottom'元素的引用,监听任何发生元素被单击的情况,并分配一个function,以准备任何单击元素的情况。

正路来说,Element.select也能做同样的事情,即作用在获取一组元素上。下一例中,演示了页面中的某一段落被单击后,便有弹出窗口:

  1. Ext.onReady(function() {   
  2.     Ext.select('p').on('click', function() {   
  3.         alert(‘You clicked a paragraph’);   
  4.     });   
  5. });  

这两个例子中,事件处理的function均是简单几句,没有函数的名称,这种类型函数称为“匿名函数(anonymous function)”,即是没有名的的函数。你也可以分配一个有名字的event handler,这对于代码的重用或多个事件很有用。下一例等效于上一例:

  1. Ext.onReady(function() {   
  2.     var paragraphClicked = function() {   
  3.         alert("You clicked a paragraph");   
  4.     }   
  5.     Ext.select('p').on('click', paragraphClicked);   
  6. });  
使用Widgets
 (Widget原意为“小器件”,现指页面中UI控件)

除了我们已经讨论过的核心JavaScript库,现在的Ext亦包括了一系列的最前端的JavaScirptUI组件库。文本以一个最常用的widget为例子,作简单的介绍。

MessageBox

比起略为沉闷的“HelloWolrd”消息窗口,我们做少许变化,前面我们写的代码是,单击某个段落便会高亮显示,现在是单击段落,在消息窗口中显示段落内容出来。
在上面的paragraphClicked的function中,将这行代码:

  1. Ext.get(e.target).highlight();  

替换为:

  1. var paragraph = Ext.get(e.target);   
  2. paragraph.highlight();   
  3. Ext.MessageBox.show({   
  4.     title: 'Paragraph Clicked',   
  5.     msg: paragraph.dom.innerHTML,   
  6.     width:400,   
  7.     buttons: Ext.MessageBox.OK,   
  8.     animEl: paragraph   
  9. });  

这里有些新的概念讨论一下。在第一行中我们创建了一个局部变量(Local Variable)来保存某个元素的引用,即被单击的那个DOM节点(本例中,我们总是段落paragrah,事因我们已经定义该事件与

标签发生关联的了)。为什么要这样做呢?嗯...观察上面的代码,我们需要引用同一元素来高亮显示,在MessageBox中也是引用同一元素作为参数使用。
一般来说,多次重复使用同一值(Value)或对象,是一个不好的方式,所以,作为一个好的OOP开发者,应该是将其分配到一个局部变量中,反复使用这变量!

现在,观察MessageBox的调用,准备作为阐述新概念的演示用。乍一看,这像一连串的参数传入到方法中,但仔细看,这是一个非常特别的语法。实际上,传入到MessageBox.show的只有一个参数:一个Object literal,包含一组属性和属性值。在Javascript中,Object Literal是动态的,你可在任何时候用{和}创建一个典型的对象(object)。其中的字符由一系列的name/value组成的属性,属性的格式是[property name]:[property value]。在整个Ext中,你将会经常遇到这种语法,因此你应该消化掉这知识!
使用Object Literal的原因是什么呢?主要的原因是“可伸缩性(flexibility)”的考虑",随时可新增、删除属性,亦可不管顺序地插入。而方法不需要改变。这也是多个参数的情况下,为最终开发者带来不少的方便(本例中的MessageBox.show())。例如,我们说这儿的foo.action方法,有四个参数,而只有一个是你必须传入的。本例中,你想像中的代码可能会是这样的foo.action(null, null, null, 'hello').,若果那方法用Object Literal来写,却是这样, foo.action({ param4: 'hello' }),这更易用和易读。

Grid

Gird是Ext中人们最想先睹为快的Widgets之一,也是最流行之一。好,让我们看看怎么轻松地创建一个Gird并运行。用下列代码替换ExtStart.js中全部语句:

  1. Ext.onReady(function() {   
  2.     var myData = [   
  3.         ['Apple',29.89,0.24,0.81,'9/1 12:00am'],   
  4.         ['Ext',83.81,0.28,0.34,'9/12 12:00am'],   
  5.         ['Google',71.72,0.02,0.03,'10/1 12:00am'],   
  6.         ['Microsoft',52.55,0.01,0.02,'7/4 12:00am'],   
  7.         ['Yahoo!',29.01,0.42,1.47,'5/22 12:00am']   
  8.     ];   
  9.     
  10.     var ds = new Ext.data.Store({   
  11.         proxy: new Ext.data.MemoryProxy(myData),   
  12.         reader: new Ext.data.ArrayReader({id: 0}, [   
  13.             {name: 'company'},   
  14.             {name: 'price', type: 'float'},   
  15.             {name: 'change', type: 'float'},   
  16.             {name: 'pctChange', type: 'float'},   
  17.             {name: 'lastChange', type: 'date', dateFormat: 'n/j h:ia'}   
  18.     ])   
  19.     });   
  20.     ds.load();   
  21.     
  22.     var colModel = new Ext.grid.ColumnModel([   
  23.         {header: "Company", width: 120, sortable: true, dataIndex: 'company'},   
  24.         {header: "Price", width: 90, sortable: true, dataIndex: 'price'},   
  25.         {header: "Change", width: 90, sortable: true, dataIndex: 'change'},   
  26.         {header: "% Change", width: 90, sortable: true, dataIndex: 'pctChange'},   
  27.         {header: "Last Updated", width: 120, sortable: true,    
  28.         renderer: Ext.util.Format.dateRenderer('m/d/Y'), dataIndex: 'lastChange'}   
  29.     ]);   
  30.     
  31.     var grid = new Ext.grid.Grid('grid-example', {ds: ds, cm: colModel});   
  32.         grid.render();   
  33.         grid.getSelectionModel().selectFirstRow();   
  34.     });  

这看上去很复杂,但实际上加起来,只有七行代码。第一行创建数组并作为数据源。实际案例中,你很可能从数据库、或者WebService那里得到动态的数据。接着,我们创建并加载data store, data store将会告诉Ext的底层库接手处理和格式化这些数据。接着,我们定义一个column模型,用来轻松地调配Gird的每一列参数。最后我们生成这个Gird,传入data store和column模型两个对象,进行渲染并选好第一行。不是太困难吧?如果一切顺利,搞掂之后你会看到像这样的:

Image:IntroToExt_grid.gif

当然,你可能对这段代码的某些细节,并不完全掌握其中的含义(像MemoryProxy究竟是什么?)但先不要紧,这个例子的目的是告诉你,用少量的代码,创建一个富界面的多功能的UI组件而已——这是完全可能的,更多细节的内容,留给读者你自己学习吧。这儿有许多学习Grid的资源。Ext Grid教程、交叉Gird演示和Grid API文档。

还有更多的..

这只是冰山一角。还有一打的UI Widgets可以供调用,如 layouts, tabs, menus, toolbars, dialogs, tree view等等。请参阅API文档中范例演示。
使用Ajax

在弄好一些页面后,你已经懂得在页面和脚本之间的控制原理(interact)。接下来,你想知道的是,怎样与后台服务器(remote server)交换数据,常见的是从数据库加载数据(load)或是保存数据(save)到数据库中。通过JavaScript异步无刷新交换数据的这种方式,就是所谓的Ajax。Ext内建卓越的Ajax支持,例如,一个普遍的用户操作就是,异步发送一些东西到服务器,然后,UI元素根据回应(Response)作出更新。这是一个包含text input的表单,一个div用于显示消息(注意,你可以在ExtStart.html中加入下列代码,但这必须要访问服务器): 

  1. "msg" style="visibility: hidden">
  2.   
  3. Name: "text" id="name" />    
  4.   
  5. "button" id="oKButton" value="OK" />  

    接着,我们加入这些处理交换数据的JavaScript代码到文件ExtStart.js中(用下面的代码覆盖):

    1. Ext.onReady(function(){   
    2.     Ext.get('oKButton').on('click', function(){   
    3.         var msg = Ext.get('msg');   
    4.             msg.load({   
    5.             url: [server url], //换成你的URL   
    6.             params: 'name=' + Ext.get('name').dom.value,   
    7.             text: 'Updating...'   
    8.     
    9.         });   
    10.         msg.show();   
    11.     });   
    12. });  

     

    这种模式看起来已经比较熟悉了吧!先获取按钮元素,加入单击事件的监听。在事件处理器中(event handler),我们使用一个负责处理Ajax请求、接受响应(Response)和更新另一个元素的Ext内建类,称作UpdateManager。UpdateManager可以直接使用,或者和我们现在的做法一样,通过Element的load方法来访问(本例中该元素是“msg“的div)。当使用Element.load方法,请求(request)会被加工处理后发送,等待服务器的响应(Response),来自动替换元素的innerHTML。简单传入服务器url地址,加上字符串参数,便可以处理这个请求(本例中,参数值来自“name”元素的value),而text值就是请求发送时提示的文本,完毕后显示那个msg的div(因为开始时默认隐藏)。当然,和大多数Ext组件一样,UpdateManager有许多的参数可选,不同的Ajax请求有不同的方案。而这里仅演示最简单的那种。

    PHP

    
分享到:
评论
5 楼 hintcnuie 2007-10-15  
当然不是了,我只是将这篇文章收藏起来而已
4 楼 sp42 2007-10-15  
xiaqi 写道
lz,这篇文章不是你写的吧

http://www.ajaxjs.com/article.asp?id=20071683
http://extjs.com/learn/Tutorial:Introduction_to_Ext_%28Chinese%29
对于新2.x,该文显得有点过时了。。。
3 楼 xiaqi 2007-10-15  
lz,这篇文章不是你写的吧
2 楼 tiyi 2007-10-13  
不错,加油!
我一直想抛弃YUI的历史包袱,直接使用Ext。
但是不知道Ext现在对菜单,TreeView(with CheckBox)这些通用组件的支持程度如何。我看官方一直在Dialog/Layout/Grid上打转为主...
1 楼 hintcnuie 2007-10-13  
那个grid的例子有错误,原文如此,呵呵

相关推荐

    EXT最新使用手册

    ### EXT最新使用手册知识点概览 #### 1. EXT简介 - **定义**: EXT是一个功能强大的JavaScript库,用于构建交互式...通过学习上述知识点,开发者可以快速上手,并逐渐掌握EXT的高级功能,提高Web开发效率和用户体验。

    asp.net ext 中文手册

    #### 10. 继承与类设计 面向对象编程(OOP)是现代软件工程的核心原则之一,而继承是OOP的一个关键特性。在EXT中,开发者可以通过继承机制扩展或定制已有组件,从而避免重复编码。文档中介绍了如何在EXT中使用继承,...

    Ext中文手册

    - **定义与背景**:Ext是一套基于JavaScript的用户界面库,它提供了丰富的组件和工具,帮助开发者快速构建高质量的Web应用程序。Ext最初由Extensible Software开发,后被Sencha公司收购。其目标是为了简化前端开发...

    嵌入式Linux 嵌入式Linux起步

    本资料“嵌入式Linux起步”旨在为初学者提供一个全面且深入的入门指南,帮助你快速进入嵌入式Linux的世界。 在学习嵌入式Linux时,首先需要理解的是它与桌面或服务器版Linux的区别。嵌入式Linux的核心在于它的轻量...

    ExtJS 3.2的中文参考手册

    #### 10. **DomQuery基础** - **基础语法**: 使用类似于jQuery的语法来选择和操作DOM元素,例如:`Ext.get('el').setStyle('color', 'red');`。 - **高级功能**: 支持链式操作、事件绑定等功能,使得DOM操作更加...

    ExtJS中文手册.pdf

    - **模板(Templates)起步**:介绍如何使用EXT的模板引擎(XTemplate)来渲染数据。 - **事件处理**:详解EXT中事件处理机制,包括处理函数的作用域问题、如何传递参数等。 - **类设计**:讲解EXT中的面向对象...

    Linux内核学习起步

    ### Linux内核学习起步 #### 一、编译内核 **1.0 获取内核压缩** 在开始学习Linux内核之前,首先需要获取Linux内核的源代码。可以通过访问官方站点 [http://www.kernel.org/pub/linux/kernel/v2.6/]...

    linuxabc起步教程

    《LinuxABC起步教程》是一份针对初学者的Linux操作系统入门指南,旨在帮助学习者在半天时间内掌握基本的Linux使用技巧。本教程涵盖了Linux命令行中的核心概念和常用命令,包括文件目录管理、磁盘与文件系统管理以及...

    Extjs教程_第一章_起步(1)

    【ExtJS教程_第一章_起步(1)】章节主要介绍了ExtJS框架的基础知识,适合初学者入门。ExtJS是一个强大的JavaScript库,专为构建富互联网应用程序(RIA)而设计,它扩展了雅虎YUI库,增加了更多功能和组件。 1. **...

    EXTJS经典教程

    - **Widgets介绍**:Ext提供了一系列的UI组件,称为Widgets,这些组件可以用来快速构建复杂的用户界面。 - **MessageBox**:一个常用的Widget,用于显示消息框,如提示信息、警告、确认对话框等。 - **Grid**:另...

    Restlet1.0_中文起步_翻译自官网

    Restlet 1.0 是一个轻量...通过这个简单的示例,你可以快速了解Restlet框架的基础用法,并逐步掌握如何利用它来构建高效的RESTful应用程序。对于想要深入了解REST架构和Restlet框架的开发者来说,这是一个很好的起点。

    轻松搞定Extjs 带目录

    本书作为Extjs的中文教程,旨在帮助读者快速上手Extjs,其内容涉及Extjs的基础知识和实际应用。 #### 2. JavaScript基础知识 - **类的定义**: Extjs中的类继承于JavaScript原生类,通过Ext.extend来定义。这是...

    springboot+mybatis封装

    起步依赖是预先打包好的Maven或Gradle依赖,开发者只需在项目中引入相应的起步依赖,就可以快速获得一组功能;自动配置则是Spring Boot根据项目类路径下的jar包自动配置相关组件;CLI则提供了快速创建和运行Spring ...

    ExtJs教程_完整版

    ### ExtJs教程_完整版 —— 第一章起步(1)关键知识点详解 #### 一、ExtJS概述 **1.1 极致的用户体验** ExtJS是一个强大的JavaScript框架,专为Web应用开发而设计。它以其优雅的API、丰富的组件集合以及出色的跨...

    Red Hat Enterprise Linux 5基础教程

    此章节为新用户提供了一个快速入门的指南,涵盖了基本的终端操作、查看系统信息、文件查找以及系统管理命令,如ps、top和kill等。 **5. 账号及身份管理** 在Linux系统中,用户和组的管理至关重要。本章会教授如何...

    linux内核及流程图

    VFS支持多种文件系统类型,如ext2、ext3、NTFS等,并能够通过网络文件系统(NFS)等方式实现跨网络的数据共享。 4. **网络接口 (NET)**:提供了对各种网络标准的存取和对各种网络硬件的支持。这一子系统负责实现TCP/...

Global site tag (gtag.js) - Google Analytics