`
44424742
  • 浏览: 232285 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

用 Ext JS 构建 Ajax 应用程序

阅读更多

用 Ext JS 构建 Ajax 应用程序

一种用于富因特网应用程序开发的 JavaScript 框架

developerWorks
文档选项
<noscript></noscript> <noscript><tr valign="top"> <td width="8"><img alt="" height="1" width="8" src="//www.ibm.com/i/c.gif"></td> <td width="16"><img alt="" width="16" height="16" src="//www.ibm.com/i/c.gif"></td> <td class="small" width="122"><p><span class="ast">未显示需要 JavaScript 的文档选项</span></p></td> </tr></noscript> <!-- document.write('<tr valign="top"><td width="8"><img src="//www.ibm.com/i/c.gif" width="8" height="1" alt=""/></td><td width="16"><img alt="将打印机的版面设置成横向打印模式" height="16" src="//www.ibm.com/i/v14/icons/printer.gif" width="16" vspace="3" /></td><td width="122"><p><b><a class="smallplainlink" href="javascript:print()">打印本页</a></b></p></td></tr>'); //--> <!-- document.write('<tr valign="top"><td width="8"><img src="//www.ibm.com/i/c.gif" width="8" height="1" alt=""/></td><td width="16"><img src="//www.ibm.com/i/v14/icons/em.gif" height="16" width="16" vspace="3" alt="将此页作为电子邮件发送" /></td><td width="122"><p><a class="smallplainlink" href="javascript:document.email.submit();"><b>将此页作为电子邮件发送</b></a></p></td></tr>'); //-->
将打印机的版面设置成横向打印模式

打印本页

将此页作为电子邮件发送

将此页作为电子邮件发送

英文原文

英文原文

<!--START RESERVED FOR FUTURE USE INCLUDE FILES--><!-- this content will be automatically generated across all content areas --><!--END RESERVED FOR FUTURE USE INCLUDE FILES-->

级别: 中级

John Fronckowiak (john@idcc.net), 总裁, IDC Consulting Inc.

2008 年 7 月 21 日

Ext JS 是一种强大的 JavaScript™ 库,它通过使用可重用的对象和部件简化了 Asynchronous JavaScript + XML(Ajax)开发。本文介绍 Ext JS,概述它背后的面向对象 JavaScript 设计概念,解释如何使用 Ext JS 框架开发富因特网应用程序的用户界面元素。
<!--START RESERVED FOR FUTURE USE INCLUDE FILES--><!-- include java script once we verify teams wants to use this and it will work on dbcs and cyrillic characters --> <!--END RESERVED FOR FUTURE USE INCLUDE FILES-->

当今有许许多多 的 Web 开发框架,开发人员很难判断哪些框架值得花时间去学习。Ext JS 是一种 JavaScript 开发框架,这种强大的 JavaScript 库通过使用可重用的对象和部件简化了 Ajax 开发,Web 应用程序开发人员应该认真考虑使用这个工具。Ext JS 最初是 Jack Slocum 编写的一组 Yahoo! User Interface(YUI)Library 扩展。但是,随着 2.0 版的发布,它已经成为市场上最简单最强大的 JavaScript 库。

developerWorks Ajax 资源中心
Ajax 资源中心 是一站式站点,包含关于开发 Ajax 应用程序的免费工具、代码和信息。活跃 Ajax 社区论坛 由 Ajax 专家 Jack Herrington 主持,您可以在这里向其他开发人员寻求帮助。

Ext JS 概述

Ext JS 项目最初的目的是扩展 YUI Library 提供的功能。YUI Library 的一个关键方面是跨浏览器支持,这也可以在 Ext JS 中找到。这种支持使开发人员在构建 Web 应用程序时不需要考虑目标浏览器。

Ext JS 提供出色的性能。这个框架是完全面向对象且可扩展的。因为 Ext JS 是用 JavaScript 编写的,所以只需下载并安装,就可以使用 Ext JS 的特性。

许可协议

在采用一个新框架之前,一定要了解框架基于哪种许可协议条款。Ext JS 提供几个许可协议选项:

  • 开放源码许可证:这采用 Open Source LGPL 3.0 许可证的条款。如果打算在另一个开放源码项目或者个人、教育或非盈利项目中使用 Ext JS,这是最合适的许可证。
  • 商用许可证:如果希望在项目中使用 Ext JS 时避免开发源码许可证的某些限制,或者由于内部原因必须拥有许可证,或者希望在商业上支持 Ext JS 的开发,这是最合适的许可证。参考资料 中提供了 Ext JS 站点的链接,这个站点提供关于商用许可证的详细信息。
  • 原始设备生产商(OEM)/转售商许可证:如果您打算对 Ext JS 进行重新打包,或者作为软件开发库销售 Ext JS,这种许可证是最合适的。

Ext JS 浏览器支持

所有主流的 Web 浏览器都支持 Ext JS 框架,包括:

  • Windows® Internet Explorer® 6 及更高版本。
  • Mozilla Firefox 1.5 及更高版本(PC 和 Macintosh)。
  • Apple Safari 2 及更高版本。
  • Opera 9 及更高版本(PC 和 Mac)。

设计模式和 Ext JS

开发人员应该会喜欢 Ext JS 经过深思熟虑的设计和实现。它的面向对象设计模式反映了对象之间的关系和交互。据设计者说,开发 Ext JS 时使用的设计模式在很大程度上受到 Head First Design Patterns 这本书(Eric Freeman 等著,参见 参考资料)的影响。查看 Ext JS 源代码,就会发现创建模式(包括 singleton 设计模式)、结构模式(包括 flyweight 设计模式)和行为模式(包括 observer 模式)。





回页首


用 Ext JS 构建富因特网应用程序

Ext JS 提供大量用户界面元素,这是开发富因特网应用程序(RIA)所必需的。Ext JS 包含消息框、组合框、数据网格和工具栏等控件。另外,还可以通过布局管理器指定元素在页面上的显示方式。还有用于操作表单和窗口的其他特性。

如果使用其他框架,JavaScript 文件的包含次序是可以修改的。但是,Ext JS 通常按照 清单 1 那样包含在 Web 应用程序中(假设 Ext JS 安装在 Web 服务器上的 lib/ext 目录中):


清单 1. 包含 Ext JS 框架
                
<script type ="text/javascript" src="lib/ext/ext-base.js"></script>
<script type ="text/javascript" src="lib/ext/ext-all.js"></script>

ext-all.js 包含整个 Ext JS 框架。可以按照上面的排列引用文件,也可以只包含应用程序中使用的元素所需的文件。

Ext JS 的集成

可以把 Ext JS 与其他常用的服务器端 Web 开发框架一起使用,包括 PHP、Java™ 语言、Microsoft® .NET、Ruby on Rails 和 ColdFusion。

如果结合使用 Ext JS 框架和其他 JavaScript 库,请参考安装根目录中的 INCLUDE_ORDER.txt 文件,它说明了在应用程序中包含库的次序。

用户界面元素

Ext JS 框架的主体是大量用户界面元素。这些元素包括表单、对话框、选项卡、树和网格。

表单

Ext JS 提供一组用来创建交互式表单的工具。图 1 给出一个表单示例。清单 2 给出相关的实现。


图 1. Ext JS 表单示例
Ext JS 表单示例

清单 2. Ext JS 表单示例的源代码
                
var top = new Ext.FormPanel({
labelAlign: 'top',
frame:true,
title: 'Multi Column, Nested Layouts and Anchoring',
bodyStyle:'padding:5px 5px 0',
width: 600,
items: [{
layout:'column',
items:[{
columnWidth:.5,
layout: 'form',
items: [{
xtype:'textfield',
fieldLabel: 'First Name',
name: 'first',
anchor:'95%'
}, {
xtype:'textfield',
fieldLabel: 'Company',
name: 'company',
anchor:'95%'
}]
},{
columnWidth:.5,
layout: 'form',
items: [{
xtype:'textfield',
fieldLabel: 'Last Name',
name: 'last',
anchor:'95%'
},{
xtype:'textfield',
fieldLabel: 'Email',
name: 'email',
vtype:'email',
anchor:'95%'
}]
}]
},{
xtype:'htmleditor',
id:'bio',
fieldLabel:'Biography',
height:200,
anchor:'98%'
}],

buttons: [{
text: 'Save'
},{
text: 'Cancel'
}]
});

top.render(document.body);

对话框和选项卡

图 2 所示,Ext JS 支持创建用于用户输入的模态对话框,还支持实现选项卡式用户界面,以便充分利用屏幕空间。图 2 中对话框的源代码见 清单 3


图 2. Ext JS 模态对话框和选项卡
Ext JS 模态对话框和选项卡

清单 3. Ext JS 模态对话框的源代码
                 
var LayoutExample = function(){
// everything in this space is private and only accessible in the HelloWorld block

// define some private variables
var dialog, showBtn;

var toggleTheme = function(){
Ext.get(document.body, true).toggleClass('xtheme-gray');
};
// return a public interface
return {
init : function(){
showBtn = Ext.get('show-dialog-btn');
// attach to click event
showBtn.on('click', this.showDialog, this);
},

showDialog : function(){
if(!dialog){ // lazy initialize the dialog and only create it once
dialog = new Ext.LayoutDialog("hello-dlg", {
modal:true,
width:600,
height:400,
shadow:true,
minWidth:300,
minHeight:300,
proxyDrag: true,
west: {
split:true,
initialSize: 150,
minSize: 100,
maxSize: 250,
titlebar: true,
collapsible: true,
animate: true
},
center: {
autoScroll:true,
tabPosition: 'top',
closeOnTab: true,
alwaysShowTabs: true
}
});
dialog.addKeyListener(27, dialog.hide, dialog);
dialog.addButton('Submit', dialog.hide, dialog);
dialog.addButton('Close', dialog.hide, dialog);

var layout = dialog.getLayout();
layout.beginUpdate();
layout.add('west', new Ext.ContentPanel('west', {title: 'West'}));
layout.add('center', new Ext.ContentPanel('center', {title: 'The First Tab'}));
// generate some other tabs
layout.add('center', new Ext.ContentPanel(Ext.id(), {
autoCreate:true, title: 'Another Tab', background:true}));
layout.add('center', new Ext.ContentPanel(Ext.id(), {
autoCreate:true, title: 'Third Tab', closable:true, background:true}));
layout.endUpdate();
}
dialog.show(showBtn.dom);
}
};
}();

// using onDocumentReady instead of window.onload initializes the application
// when the DOM is ready, without waiting for images and other resources to load
Ext.EventManager.onDocumentReady(LayoutExample.init, LayoutExample, true);

创建树

图 3 所示,Ext JS 还提供树控件,这种控件提供用户熟悉的与文件系统相似的视图。Ext JS 树控件完全支持拖放功能。图 3 所示树控件的源代码见 清单 4


图 3. Ext JS 树控件
Ext JS 树控件

清单 4. Ext JS 树控件的源代码
                
var TreeTest = function(){
// shorthand
var Tree = Ext.tree;

return {
init : function(){
// yui-ext tree
var tree = new Tree.TreePanel({
el:'tree',
animate:true,
autoScroll:true,
loader: new Tree.TreeLoader({dataUrl:'get-nodes.php'}),
enableDD:true,
containerScroll: true,
dropConfig: {appendOnly:true}
});

// add a tree sorter in folder mode
new Tree.TreeSorter(tree, {folderSort:true});

// set the root node
var root = new Tree.AsyncTreeNode({
text: 'Ext JS',
draggable:false, // disable root node dragging
id:'source'
});
tree.setRootNode(root);

// render the tree
tree.render();

root.expand(false, /*no anim*/ false);

//-------------------------------------------------------------

// YUI tree
var tree2 = new Tree.TreePanel({
el:'tree2',
animate:true,
autoScroll:true,
loader: new Ext.tree.TreeLoader({
dataUrl:'get-nodes.php',
baseParams: {lib:'yui'} // custom http params
}),
containerScroll: true,
enableDD:true,
dropConfig: {appendOnly:true}
});

// add a tree sorter in folder mode
new Tree.TreeSorter(tree2, {folderSort:true});

// add the root node
var root2 = new Tree.AsyncTreeNode({
text: 'My Files',
draggable:false,
id:'yui'
});
tree2.setRootNode(root2);
tree2.render();

root2.expand(false, /*no anim*/ false);
}
};
}();

Ext.EventManager.onDocumentReady(TreeTest.init, TreeTest, true);

网格

最强大的 Ext JS 用户界面元素可能是网格控件。可以通过它显示来自后端数据源的数据和其他结构化数据,比如 XML 和数组。如 图 4 所示,Ext JS 网格可以实现分页和列排序。这个示例接收来自 ExtJS.com 论坛的最新主题,强调了 Ext JS 框架的 Ajax 功能。图 4 所示网格的源代码见 清单 5


图 4. Ext JS 网格控件
Ext JS 网格控件

清单 5. Ext JS 网格控件的源代码
                
Ext.onReady(function(){

// create the Data Store
var store = new Ext.data.Store({
// load using script tags for cross domain, if the data in on the same domain as
// this page, an HttpProxy would be better
proxy: new Ext.data.ScriptTagProxy({
url: 'http://extjs.com/forum/topics-browse-remote.php'
}),

// create reader that reads the Topic records
reader: new Ext.data.JsonReader({
root: 'topics',
totalProperty: 'totalCount',
id: 'threadid',
fields: [
'title', 'forumtitle', 'forumid', 'author',
{name: 'replycount', type: 'int'},
{name: 'lastpost', mapping: 'lastpost', type: 'date',
dateFormat: 'timestamp'},
'lastposter', 'excerpt'
]
}),

// turn on remote sorting
remoteSort: true
});
store.setDefaultSort('lastpost', 'desc');

// pluggable renders
function renderTopic(value, p, record){
return String.format(
'<b><a href="http://extjs.com/forum/showthread.php?t={2}"
target="_blank">{0}</a></b>
<a href="http://extjs.com/forum/forumdisplay.php?f={3}"
target="_blank">{1} Forum</a>',
value, record.data.forumtitle, record.id, record.data.forumid);
}
function renderLast(value, p, r){
return String.format('{0}<br/>by {1}', value.dateFormat('M j, Y, g:i a'),
r.data['lastposter']);
}

// the column model has information about grid columns
// dataIndex maps the column to the specific data field in
// the data store
var cm = new Ext.grid.ColumnModel([{
id: 'topic',
header: "Topic",
dataIndex: 'title',
width: 420,
renderer: renderTopic
},{
header: "Author",
dataIndex: 'author',
width: 100,
hidden: true
},{
header: "Replies",
dataIndex: 'replycount',
width: 70,
align: 'right'
},{
id: 'last',
header: "Last Post",
dataIndex: 'lastpost',
width: 150,
renderer: renderLast
}]);

// by default columns are sortable
cm.defaultSortable = true;

var grid = new Ext.grid.GridPanel({
el:'topic-grid',
width:700,
height:500,
title:'ExtJS.com - Browse Forums',
store: store,
cm: cm,
trackMouseOver:false,
sm: new Ext.grid.RowSelectionModel({selectRow:Ext.emptyFn}),
loadMask: true,
viewConfig: {
forceFit:true,
enableRowBody:true,
showPreview:true,
getRowClass : function(record, rowIndex, p, store){
if(this.showPreview){
p.body = '<p>'+record.data.excerpt+'</p>';
return 'x-grid3-row-expanded';
}
return 'x-grid3-row-collapsed';
}
},
bbar: new Ext.PagingToolbar({
pageSize: 25,
store: store,
displayInfo: true,
displayMsg: 'Displaying topics {0} - {1} of {2}',
emptyMsg: "No topics to display",
items:[
'-', {
pressed: true,
enableToggle:true,
text: 'Show Preview',
cls: 'x-btn-text-icon details',
toggleHandler: toggleDetails
}]
})
});

// render it
grid.render();

// trigger the data store load
store.load({params:{start:0, limit:25}});

function toggleDetails(btn, pressed) {
var view = grid.getView();
view.showPreview = pressed;
view.refresh();
}
});

Ext JS 和 Ajax

Ext JS 框架支持 Ajax 实现。通常,Ajax 应用程序的一个共有特性是应用程序可以异步地响应用户输入,它会更新部分用户界面,而不需要重新显示整个 Web 页面。清单 6 给出一个典型的 Ext JS Ajax 实现:当单击按钮时,HTML 文本框和按钮元素把文本框中的数据发送给 Web 服务器。


清单 6. Ext JS 的 Ajax 实现
                
<script type =”text/javascript”>
Ext.onReady(function(){
Ext.get('okButton').on('click', function(){
var msg = Ext.get("msg");
msg.load({
url: [server url], // <-- replace with your url
params: "name=" + Ext.get('name').dom.value,
text: "Updating..."
});
msg.show();
});
});
</script>

<div id="msg" style="visibility: hidden"></div>
Name: <input type="text" id="name" /><br />
<input type="button" id="okButton" value="OK" />

当用户单击 OK 时,使用 Ext JS UpdateManage 类发出 Ajax 调用,这比传统的 Ajax HttpRequest 调用简单多了。

Ext JS 与其他 Web 服务器框架的集成

可以把 Ext JS 与其他常用的服务器端 Web 开发框架一起使用,包括 PHP、Java 语言、Microsoft .NET、Ruby on Rails 和 ColdFusion。关于与这些框架集成的详细信息,参见 参考资料

Ext JS 开发工具

可以在几种流行的集成开发环境(IDE)中进行 Ext JS 开发,包括 Eclipse、Aptana 和 Komodo。关于 IDE 对 Ext JS 开发的支持的信息,参见 参考资料

结束语

Web 开发框架常常承诺简化和加快应用程序开发,但是许多框架都没有实现这个目标。Ext JS 通过一个易用的开发模型实现了它的承诺。最新的 Ext JS 版本(2.0)表明,它正在快速进步,可以成为 RIA 开发的基础。

本文只是粗略地介绍 Ext JS 框架的主要特性,Ext JS 的特性远不止这些。现在,如果要进行更深入的探索,请从 ExtJS.com Web 站点和 交互式示例 开始!

分享到:
评论

相关推荐

    Build Ajax Applications with Ext JS.pdf

    ### 构建Ajax应用程序使用Ext JS #### 一、引言与概述 在当今Web开发领域,各种框架层出不穷,使得开发者难以抉择。其中,Ext JS作为一款强大的JavaScript库,在简化Asynchronous JavaScript + XML(简称Ajax)...

    Ext JS高级程序设计

    这本书分为三章,涵盖了Ext JS的关键概念和技术,旨在帮助开发者充分利用这个强大的JavaScript库来构建功能丰富的Web应用程序。 第一章可能涉及了Ext JS的基础和核心概念,包括MVC(Model-View-Controller)架构的...

    javascript的ext综合应用,Ext js 资源大全

    Ext JS 是一个强大的JavaScript库,专门用于构建富客户端应用程序。它提供了一套完整的组件模型,包括数据绑定,事件处理,布局管理,以及丰富的用户界面组件,使得开发者无需深入JavaScript底层细节,就能创建出...

    使用Ext2.0的Ajax连接ArcIMS例子

    1. **Ext2.0**:一个开源的JavaScript库,用于构建交互式的Web应用。它提供了丰富的用户界面组件和便捷的数据处理功能。 2. **Ajax**:Asynchronous JavaScript and XML的缩写,一种在无需重新加载整个网页的情况下...

    Ext2.0.2的Ajax请求拦截示例

    Ext2.0.2是Ext JS的一个早期版本,它是一个流行的JavaScript库,用于构建富客户端Web应用程序。在Ext JS中,Ajax请求是进行异步数据交互的基础,它允许页面在不刷新的情况下与服务器进行通信。本示例将深入探讨如何...

    集成 Flex 与 Ajax 应用程序

    1. JavaScript 库,如文中提到的 Ext JS,用于构建 Ajax 功能。 2. Adobe Flex SDK,包含调试功能,用于开发 Flex 应用程序。 3. Adobe Flash Player 9 或更高版本,确保 Flash 内容的运行。 4. Adobe Flex Builder...

    EXT中文文档,EXT简明教程(Ajax框架)

    EXT,全称EXT JS,是一种基于JavaScript的开源前端框架,主要应用于构建富互联网应用程序(RIA)。EXT JS的设计理念是提供一套完整的组件模型、数据绑定机制和丰富的用户界面控件,以便开发者可以创建出功能强大、...

    Ext ajax 上传文件

    Ext JS是一个强大的JavaScript库,专门用于构建富客户端应用程序,它提供了一系列丰富的UI组件和强大的数据管理工具。 首先,让我们了解一下文件上传的基本原理。在HTML中,`&lt;input type="file"&gt;`元素用于让用户...

    ext Ajax桌面程序例子

    这个"ext Ajax桌面程序例子"可能采用了EXTJS框架,EXTJS是一个强大的JavaScript库,提供了丰富的UI组件和功能,如表格、面板、菜单、工具栏等,非常适合构建复杂的Web应用程序,尤其是桌面式的应用。EXTJS的组件化...

    ext js javascript ext设计软件

    总的来说,EXT JS JavaScript EXT设计软件提供了一个完整的解决方案,帮助开发者用JavaScript构建高性能、响应式的企业级Web应用。通过熟练掌握EXT JS,开发者可以创建出具有专业品质的用户界面,并享受到高效的开发...

    ext js 培训资料

    EXT JS是一个强大的JavaScript框架,专为构建富客户端Web应用程序设计,其核心在于提供丰富的组件库和优秀的用户体验。 **RIA技术与EXT JS** 1. **RIA(Rich Internet Applications)**是互联网应用的未来趋势,它...

    基于DWR与EXT的Ajax应用研究与实现.pdf

    基于DWR与EXT的Ajax应用研究与实现 Ajax技术是Web 2.0时代的核心技术之一,它使Web页面不需要刷新就可以动态更新,从而节省了网络带宽,减轻了服务器的负担,使用户得到更好的体验。但是,Ajax技术也存在一些问题,...

    最新Ext js 开发工具(IDE)

    Ext JS是一种广泛使用的JavaScript库,专门用于构建富客户端的Web应用程序。它提供了丰富的用户界面组件,包括表格、面板、图表和其他交互式元素,使得开发者能够创建功能强大的前端应用。最新的开发工具版本为...

    ajax-ext框架

    Ajax-ext框架是一款强大的JavaScript库,专为构建富客户端应用程序而设计,它结合了Ajax技术的优势和ExtJS库的功能,提供了一种高效、可扩展的方式来实现动态和交互式的Web应用。框架的核心目标是简化Web开发,使...

    使用Ext中的Ajax做的聊天室

    1. **Ext框架**:Ext是一个基于JavaScript的开源UI库,提供了丰富的组件和布局管理,用于构建富客户端应用程序。在这个聊天室实例中,我们并未使用其完整的UI工具集,而是主要依赖于核心功能。 2. **Ajax技术**:...

    JavaScript凌厉开发——Ext JS3详解与实践

    Ext JS是一个用于构建富互联网应用程序(RIA)的JavaScript库,其3.0版本在当时提供了丰富的组件、优秀的可扩展性和强大的数据管理能力。在学习Ext JS3时,我们需要掌握以下几个关键知识点: 1. **组件化开发**:...

    extjs ajax同步请求所需js

    ExtJS 是一个强大的JavaScript 框架,专用于构建富客户端Web应用程序。它提供了一整套组件、工具和API,使开发者能够创建复杂的用户界面。在ExtJS中,Ajax(异步JavaScript和XML)请求是数据交互的核心部分,用于与...

    Ext3.1 Ajax 精简包以及使用方法

    Ext3.1是一款基于JavaScript的富客户端开发框架,主要用于构建交互性强、功能丰富的Web应用程序。Ajax,即异步JavaScript和XML(Asynchronous JavaScript and XML),是Ext3.1中的一个核心特性,它允许Web应用在不...

    ext集锦_ajax学习必备

    EXT库是一个强大的JavaScript前端框架,它提供了一整套组件和工具,方便开发者构建富互联网应用程序(RIA)。 首先,让我们深入了解一下EXT中的Ajax使用。EXT提供了Ext.Ajax类,这是一个内置的Ajax接口,用于发送...

    ext js 打包资源下载

    Ext JS 是一种流行的JavaScript库,专门用于构建富客户端的Web应用程序。它提供了丰富的用户界面组件,如表格、面板、窗口、菜单等,使得开发者能够创建功能强大的交互式前端应用。在"ext js 打包资源下载"中,我们...

Global site tag (gtag.js) - Google Analytics