ExtJS 2.0入门指南

简介:
开始!

    我们将讲讲怎么使用ExtJS,来完成一些JavaScript常见的任务。如果你想自己试试,就应该先下IntroToExt2.zip,用来构建已下面的Ext代码。

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

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

Ext.onReady(function(){alert("Congratulations!  You have Ext configured correctly!");});
Ext.onReady可能是你接触的第一个也可能是在每个页面都要使用的方法。这个方法会在DOM加载全部完毕后,保证页面内的所有元素能被Script引用(reference)之后调用。你可删除alert()那行,加入一些实际用途的代码试试。

Element:Ext的核心

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

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中加入下列语句):

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)。
这意味着你可用少量的代码来做各种各样的事情,这里仅仅是一个简单的例子(完整的列表在Element API 文档中)。

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

myDiv.highlight();//黄色高亮显示然后渐退
myDiv.addClass('red');// 添加自定义CSS类 (在ExtStart.css定义)
myDiv.center();//在视图中将元素居中
myDiv.setOpacity(.25);// 使元素半透明

获取多个DOM的节点

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

DomQuery可作为单独的库使用,但常用于Ext,你可以在上下文环境中(Context)获取多个元素,然后通过Element接口调用。令人欣喜的是,Element对象本身便有Element.selcect的方法来实现查询,即内部调用DomQuery选取元素。这个简单的例子中,ExtStart.htm包含若干段落(<p>标签),没有一个是有ID的,而你想轻松地通过一次操作马上获取每一段,全体执行它们的动作,可以这样做:

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


Element.select在这个例子中的方便性显露无疑。它返回一个复合元素,能通过元素接口(Element interface)访问每个元素。这样做的好处是可不用循环和不分别访问每一个元素。

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

响应事件

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


复制代码
function MyparagraphClick()
{
    alert("dsdf");
}

function test(e)
{
    var para = Ext.get(e.target);
    para.highlight();
    Ext.MessageBox.show({title:'para clicked',msg:para.dom.innerHTML,width:400,
    buttons:Ext.MessageBox.OK,animEl:para});
}
Ext.onReady(function() 
{
    var myDiv = Ext.get('myDiv');
    myDiv.highlight();
    myDiv.addClass('red');
    myDiv.center();
    
    Ext.select('p').highlight();
    Ext.get('myButton').on('click',function()
    {
        alert("click me!");
    });
    var paragraphClick = function(e)
    {
        //alert("click wto");
        Ext.get(e.target).highlight();
    }
    Ext.select('p').on('click',test); 
    
});

复制代码
现在,为了我们接下来阐述新概念的演示,请观察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

Grid是Ext中人们最想先睹为快的和最为流行Widgets之一。好,让我们看看怎么轻松地创建一个Grid并运行。

复制代码
Ext.onReady(function() 
{

    var myData =[['Apple',29.89,0.24,0.81,'9/1 12:00am'],
    ['Ext',83.81,0.28,0.34,'9/12 12:00am'],
    ['Google',71.72,0.02,0.03,'10/1 12:00am'],
    ['Microsoft',52.55,0.01,0.02,'7/4 12:00am'],
    ['Yahoo!',29.01,0.42,1.47,'5/22 12:00am']];
 var myReader =new Ext.data.ArrayReader({},[{name:'company'},{name:'price', type:'float'},{name:'change', type:'float'},{name:'pctChange', type:'float'},{name:'lastChange', type:'date', dateFormat:'n/j h:ia'}]);
 var grid =new Ext.grid.GridPanel({store:new Ext.data.Store({data: myData,
            reader: myReader}),
        columns:[{header:"Company", width:120, sortable:true, dataIndex:'company'},{header:"Price", width:90, sortable:true, dataIndex:'price'},{header:"Change", width:90, sortable:true, dataIndex:'change'},{header:"% Change", width:90, sortable:true, dataIndex:'pctChange'},{header:"Last Updated", width:120, sortable:true, 
                renderer: Ext.util.Format.dateRenderer('m/d/Y'), 
                            dataIndex:'lastChange'}],
        viewConfig:{forceFit:true},
        renderTo:'content',
        title:'My First Grid',
        width:500,
        frame:true});
 
    grid.getSelectionModel().selectFirstRow();
});

复制代码
 

这看上去很复杂,但实际上加起来,只有四行代码(不包含测试数据的代码)。

第一行创建数组并作为数据源。实际案例中,你很可能从数据库、或者WebService那里得到动态的数据。
接着,我们创建并加载data store, data store将会告诉Ext的底层库接手处理和格式化这些数据。不同的数据类型须在类Reader中指明。
接着,我们创建一个Grid的组件,传入各种的配置值,有:
新的data store, 配置好测试数据和reader
列模型column model定义了列columns的配置
其他的选择指定了Grid所需的功能
最后,通过SelectionModel告诉Grid高亮显示第一行。
不是太困难吧?如果一切顺利,完成之后你会看到像这样的:

 
使用Ajax

在弄好一些页面后,你已经懂得在页面和脚本之间的交互(interact)原理。接下来,你应该掌握的是,怎样与远程服务器(remote server)交换数据,常见的是从数据库加载数据(load)或是保存数据(save)到数据库中。通过JavaScript异步无刷新交换数据的这种方式,就是所谓的Ajax。Ext内建卓越的Ajax支持,例如,一个普遍的用户操作就是,异步发送一些东西到服务器,然后,UI元素根据回应(Response)作出更新。

客户端: 

<div id="msg"></div>
<div>Name:<input type="text"id="name"/>
<input type="button"id="okButton" value="确定"/>
</div>
 

复制代码
Ext.onReady(function() 
{    
    Ext.get('okButton').on('click',function()
    {
        var msg = Ext.get('msg');
        msg.load({url:'http://localhost:8080/ajaxDemo/hello',
        params:'name='+ Ext.get('name').dom.value,
        text:'Updating'});
        msg.show();
    });
    
});

复制代码
 服务器端:

复制代码
import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


public class hello extends HttpServlet {
    public hello() {
        super();
    }
    public void destroy() {
        super.destroy(); // Just puts "destroy" string in log
        // Put your code here
    }
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
              doPost(request, response);
        }

    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        response.setContentType("text/html");
        PrintWriter out = response.getWriter();

        out.print("From Server: hello,ajax!");
        out.close();
    }

    public void init() throws ServletException {
        // Put your code here
    }

}

复制代码




本文转自Phinecos(洞庭散人)博客园博客,原文链接:http://www.cnblogs.com/phinecos/archive/2008/07/14/1242855.html,如需转载请自行联系原作者
目录
相关文章
|
7月前
|
缓存 JavaScript 前端开发
【JavaScript 技术专栏】DOM 操作全攻略:从基础到进阶
【4月更文挑战第30天】本文深入讲解JavaScript与DOM交互,涵盖DOM基础、获取/修改元素、创建/删除元素、事件处理结合及性能优化。通过学习,开发者能掌握动态改变网页内容、结构和样式的技能,实现更丰富的交互体验。文中还讨论了DOM操作在实际案例、与其他前端技术结合的应用,助你提升前端开发能力。
280 0
|
6月前
|
XML JSON 前端开发
JavaScript入门宝典:核心知识全攻略(下)
JavaScript入门宝典:核心知识全攻略(下)
|
6月前
|
JavaScript 前端开发 UED
JavaScript入门宝典:核心知识全攻略(上)
JavaScript入门宝典:核心知识全攻略(上)
|
7月前
|
开发框架 网络架构 开发者
【Uniapp 专栏】Uniapp 高级特性的深入探索与应用
【5月更文挑战第16天】Uniapp是一款跨平台开发框架,提供条件编译(针对不同平台优化)、动态路由(运行时动态管理)、分包机制(提升加载速度)和状态管理(结合Vuex优化数据流)等高级特性。它支持组件化开发和国际化,助力创建高效、创新应用,满足复杂业务需求,提升用户体验。随着技术进步,Uniapp将继续引入更多优秀特性。
146 1
【Uniapp 专栏】Uniapp 高级特性的深入探索与应用
|
前端开发
CSS权威指南阅读笔记第一章01
元素是文档结构的根基
|
Web App开发 前端开发 iOS开发
CSS权威指南阅读笔记第一章03
CSS权威指南阅读笔记第一章03 样式表内容
|
7月前
|
前端开发
前端开发入门教程分享
前端开发入门教程分享
|
编解码 前端开发
CSS权威指南阅读笔记第一章04
CSS权威指南阅读笔记第一章04 媒体查询
|
设计模式 人工智能 前端开发
《现代Javascript高级教程》电子书抢先阅读,了解如何在JavaScript中构建高质量的应用程序!
本书旨在帮助学习者进阶JavaScript编程,涵盖现代JavaScript的高级概念和技术,包括异步编程、函数式编程、模块化开发、ES6+语法等。通过实际项目示例和练习,学习者将深入了解如何在JavaScript中构建高质量的应用程序。
《现代Javascript高级教程》电子书抢先阅读,了解如何在JavaScript中构建高质量的应用程序!
|
前端开发 Apache