ExtJs 架构分析

合集下载

3-1-Ext应用架构

3-1-Ext应用架构

Ext应用架构应用的可扩展性、可维护性和灵活性取决于应用架构的质量,但这并不被重视。

概念设计和原型变成了大规模的应用,许多应用的基础基本就是示例代码的复制与粘贴,这很诱人,因为这可以让你在项目在开始阶段有一个快速的进度。

然而,节省下来的时间相对于项目后期的维护、扩展甚至重构应用的时间来说,算不得什么。

比较好的的方式是写一个可靠的架构,在实施前编写好遵循的约定和定义应用的视图、模型、存储和控制器等。

在这篇文章,我们将会看到一个受欢迎的应用并讨论如何构建用户接口,从而创建可靠的架构。

代码结构应用程序架构体系会为实际类和框架代码提供结构和一致性。

建立一个好的架构有以下主要好处:在ExtJS 4创建你的应用时,应该考虑一下我们定义的约定,尤其是统一的目录结构。

这个结构要求所有类文件都放到app目录下,在该目录下,可根据命名空间划建立models、views、controllers和stores等4个子目录。

虽然ExtJS 4提供了如何构建你的应用的最佳做法,但是你也可以根据自己需要修改我们建议的文件和类的命名约定,例如,你可以为你的控制器在‚Controller‛前加上前缀,如‚Users‛修改为‚UsersController‛。

在这种情形下,记得给所有的控制器文件和类加前缀。

最重要的一点是,要在开始编写应用程序前定义好这些约定并遵守它。

这样,你就可以在任何需要的地方调用这些类。

我们强烈建议要遵守控制器、模型、Store、视图这4个文件夹的命名约定,这可以确保你可以使用SDK Tools beta 对应用进行优化。

寻找平衡点视图将应用程序的UI分割成视图是好的开始。

通常做法是,你提供线框,而设计师创建UI实体模型。

尝试一下使用以下模型,让我们的设计师如何使用ExtJS重建潘多拉应用。

我们需要在视图粒度与通用性之间寻求一个平衡。

让我们看看当划分太多视图的时候会发生什么。

将UI划分成太多小的视图将会让视图在控制器中变得难以管理、引用和控制。

Extjs、雅虎UI库、jQuery—js框架介绍

Extjs、雅虎UI库、jQuery—js框架介绍

Extjs、雅虎UI库、jQuery—js框架介绍ExtJSExtJS是一个Javascript库,功能强大,界面美观,可以使用Ajax, DHTML,DOM等技术开发网络应用程序。

历史最初的ExtJS只是YUI的一个扩展包,从1.1版开始独立发布。

它是一个开源软件,遵守GPL 3.0协议。

许可证Extjs之前使用LGPL和商业授权的双重协议,在08年时改成了现在使用的GPL和商业授权的双重协议,也遵守其他的开源软件协议。

功能描述Ext包括多种控件,可以实现各种各样的功能文本框和文本域控制,可以控制文本框和文本域中的内容过滤,实现所见即所得的编辑形式。

单选框和复选框控制Grid control(表格控件):可以轻松的实现表格数据统计,拖放。

树形控制:生成树形目录,编辑管理树,点击展开或是关闭。

Tabs:可活动的标签页,标签页组,可自由添加和删除的标签页,功能丰富。

工具条:在面板中可以方便的插入顶部工具条或是底部工具条,实现各种复杂的功能。

桌面应用程序菜单:可以制作类似于Windows桌面的网页菜单。

灵活的面板布局:将一个面板划分为东南西北中(ESWNC)五个部分,每个部分可以放不同的内容。

滚动条:用滚动条来控制数据的显示。

Flash图表:flash制作的数据图表功能。

优点和不足Ext整合了CSS样式文件,窗口、面板都有现成的样式,甚至都不需要美工进行特别的美化就可以直接使用。

功能涵盖了一个Web 2.0网站所需要的几乎所有的功能,非常完备。

但是相应的文件大,加载速度并不理想,而且在低版本的浏览器上显示效果不佳。

学习网站:雅虎UI库雅虎UI库 (Yahoo! UI Library,YUI) 是一个开放源代码的 JavaScript 函数库,为了能建立一个高互动的网页,它采用了AJAX,DHTML 和 DOM 等程式码技术。

它也包含了许多 CSS 资源。

使用授权为 BSD许可证.功能YUI 包含完整的说明文件。

Extjs4 MVC模式浅析

Extjs4 MVC模式浅析

Extjs4 API文档阅读(二)-- MVC架构(MVC Architecture)对于Extjs来说,大客户端程序一直很难写,当你为大客户端程序添加更多的功能和项目的时候,项目的体积往往迅速增长。

这样的大客户端程序很难组织和维持,所以,Extjs4配备了一个新的应用程序体系结构,它能结构化你的代码。

Extjs4有别于其他MVC架构,Extjs有他自己定义:1、Model是一个Field以及他的Data的集合,Modes知道如何通过Stores来表示数据,以能用于网格和其他组件。

模型的工作很像Extjs3的记录集(Record class),通常通过数据加载器(Stores)渲染至网格(grid)和其他组件上边。

2、View:用以装载任何类型的组件—grid、tree和panel等等。

3、Controller—用来放使得app工作的代码,例如 render views , instantiating Models 或者其他应用逻辑。

本篇文章,我们将创建一个非常简单的应用程序,即用户数据管理,最后,你就会知道如何利用EXTJS4 MVC去创建简单应用程序。

MVC应用程序架构提供如此全面的结构和一致性,因为它是真正的类库和代码框架。

这样的模式带来了一些重要的好处:1、每个应用程序的工作方式相同,我们只需要学习一次。

2、应用程序之间的代码共享很容易,应为他们所有的工作方式都相同3、你可以使用EXTJS提供的构建工具创建你应用程序的优化版本。

(这句明显是广告嘛)文件结构Ext JS的应用程序和别的应用程序一样都遵循一个统一的目录结构。

在MVC布局中,所有的类放在应用程序文件夹,它的子文件夹中包含您的命名空间,模型,视图,控制器和存储器。

下面来通过简单的例子来看下怎样应用。

图在这个例子中,我们将整个应用程序放到一个名为”account_manager”的文件夹下,”account_manager”文件夹中的结构如上图。

ExtJs框架简介

ExtJs框架简介

helloWord示例程序
helloWord在HTML直接嵌入代码实现
<script type="text/javascript" language="javascript"> Ext.onReady(function(){ Ext.Msg.alert('helloWord','Hello Word!'); }); </script>
Ext入门基础
Ext中 get、getDom、getCmp的区别
getDom方法能够得到文档中的DOM节点,该方法中包含一个参数,该参数 可以是DOM节点的id、DOM节点对象或DOM节点对应的Ext元素(Element)等。 (与getElementById是一个效果) Ext.onReady(function(){ var e=new Ext.Element("hello"); Ext.getDom("hello"); Ext.getDom(e); Ext.getDom(e.dom); }); //Html页面中包含一个id为hello的div,代码如下: <div id="hello">aaa</div> 在上面的代码中,Ext.getDom("hello")、Ext.getDom(e)、Ext.getDom(e.dom) 等三个语句返回都是同一个DOM节点对象。
Ext入门基础
get,getDOM,getCmp的区别 DOM的增删改查
尺寸&大小,定位
动画
事件 类编程 AJAX
Ext入门基础
要学习及应用好Ext框架,必须需要理解Html DOM、Ext Element及 Component三者之间的区别。 每一个HTML页面都有一个层次分明的DOM树模型,浏览器中的所有内容都 有相应的DOM对象,动态改变页面的内容,正是通过使用脚本语言来操作 DOM对象实现。(通常使用getElementById/Ext.getDOM获得DOM对象) 仅仅有DOM是不够的,比如要把页面中的某一个节点移到其它位置,要给某 一个节点添加阴影效果,要隐藏或显示某一个节点等,我们都需要通过几句 javascript才能完成。因此,Ext在DOM的基础上,创建了Ext Element,可以 使用Element来包装任何DOM,Element对象中添加了一系列快捷、简便的实 用方法。(通常使用Ext.get获得Element对象) 对于终端用户来说,仅仅有Element是不够的,比如用户要显示一个表格、要 显示一棵树、要显示一个弹出窗口等。因此,除了Element以外,Ext 还建立 了一系列的客户端界面组件Component,我们在编程时,只要使用这些组件 Componet即可实现相关数据展示及交互等,而 Component是较高层次的抽 象,每一个组件在渲染render的时候,都会依次通过Element、DOM来生成 最终的页面效果。(通常使用Ext.getCmp获得Component对象)

ext--js框架

ext--js框架

ext目录Ext简介Ext是一个强大的js类库,以前是基于YAHOO-UI,现在已经完全独立了,主要包括data,widget,form,grid,dd,menu,其中最强大的应该算grid 了,编程思想是基于面向对象编程(oop),扩展性相当的好.可以自己写扩展.自己定义命名空间.web应用可能感觉太大.不过您可以根据需要按需加载您想要的类库就可以了.主要包括三个大的文件ext-all.css,ext-base.js,ext-all.js(包括所有的类库,您可以根据需要进行删减.官方网站提供这一接口),在引用ext类库的时候.这三个文件必不可少.它提供了丰富的,非常漂亮的外观体验,成为众多界面层开发人员的追捧!其核心的组件基本覆盖了我们构建富客户端的常用的组件。

从 Ext 2开始,商业版(针对那些以盈利为目的的开发方)要收费了。

这可能会影响一些他的应用前景。

目前的最新版本为4.0Ext动画功能介绍一下Ext预置的11个动画功能。

1.slideIn/slideOut:元素的滑进或滑出效果。

默认slideIn是从顶部滑进的,而slideOut 是从底部滑出的,可通过修改第1个参数设置滑进或滑出位置。

其使用方法请看下面代码。

var el = Ext.get('elId');el.slideIn(); //从顶部滑进el.slideOut(); //从底部滑出el.slideIn('l',{ easing: 'easeOut', duration: .5 }); //从左边滑进2.puff:元素慢慢向四周扩大并逐渐消失。

当效果完成后,元素将隐藏(visibility属性为hidden),不过元素原来所占位置将继续存在。

如果需要删除元素,请设置remove属性为true。

其使用方法请看下面代码。

var el = Ext.get('elId'); //默认方式el.puff();//自定义方式,元素消失后删除元素el.puff({ easing: 'easeOut', duration: .5, remove: true, useDisplay: false })3.switchOff:元素闪烁一下,然后往中心折叠(类似关掉电视)。

Extjs

Extjs

Extjs1.Extjs简介.Extjs是一个Ajax框架,是一个用javascript写的,用于在客户端创建丰富多彩的web应用程序界面。

ExtJs可以用来开发RIA(Rich Internet Application,富互联网应用系统)的Ajax应用框架。

ExtJs是一个用javascript写的,主要用于创建前端用户界面,是一个与后台技术无关的前端ajax框架。

因此,可以把ExtJs用在.Net,Java.Php等各种开发语言开发的应用中2.Ext库文件说明.要使用extjs,那么首先要得到extjs库文件,该框架是开源的,可以直接从官方网站下载。

解压后看到文件有:adapter: 负责将里面提供的第三方底层库(包括ext自带的底层库)映射为Ext所支持的底层库。

build :压缩后的ext全部源码(里面分类存放)docs : API帮助文档examples :提供使用ExtJS技术做出的小实验resources :ExtUI资源文件目录,如CSS、图片文件都存放在这里。

source : 没有经过压缩的Ext全部的源码(里面分类存放),遵从Lesser GNU开源的协议。

Ext-all.js :压缩后的Ext全部源码ext-all-debug.js :未经压缩的Ext全部的源码(用于调试)ext-core.js :压缩后的Ext的核心组件,包括sources/core下的所有类。

ext-core-debug.js:未经压缩的Ext核心组件,包括sources/core下的所有类。

3.应用ExtJs应用extjs需要在页面中引入extjs的样式及extjs库文件。

样式文件为resources/css/ext-all.css,extjs的js 库文件主要包含两个:adapter/ext/ext-base.js及ext-all.js。

其中ext-base.js表示框架基础库,ext- all.js是extjs的核心库。

ExtJS开发框架简介讲解

ExtJS开发框架简介讲解
▪ 布局方式由类yout.FormLayout提供,定义的名 称为form。一般情况只用于formPanel的布局,把 formPanel中的各子元素按每行一列的方式进行布局显 示。
FitLayout布局
❖ Ext中布局的方式yout.FitLayout
▪ 由yout. FitLayout类定义,名称为fit。填充布局 方式是把容器中的子元素覆盖容器的整个区域
❖ AnchorLayout布局没有任何的直接配置选项(继承的除外),然而在使用 AnchorLayout布局时,其子组件都有一个anchor属性,用来配置此子组件在父容器中 所处的位置。
Ext常用组件
❖ Tabs ❖ Grids ❖ Trees ❖ Forms ❖Toolbar and Menus
TableLayout布局
• Ext中布局的方式yout.TableLayout 这种布局方式由类yout. TableLayout提供,定义的名称为 table。一般情况不采用这种布局方式,因为其不能自适合屏幕或其 父容器的宽度和高度。
Anchor布局
❖ anchor布局将使组件固定于父容器的某一个位置,使用anchor布局的子组件尺寸相对 于容器的尺寸,即父容器容器的大小发生变化时,使用anchor布局的组件会根据规定 的规则重新渲染位置和大小。
▪ Ext最新版本是ext6.0
Ext框架简介
❖ Ext提供一系列的对象类,这些基本 上都是用于处理WEB页面控件。
❖ Ext的发布包括三个方面的内容: API参考手册、示例程序及开发包。
❖开发包
Ext框架简介
❖ 示例程序
Ext框架简介
▪Ext示例程序包共包括十六大类近100示例程序 。
❖API docs

前端开发-ExtJS框架培训

前端开发-ExtJS框架培训

ExtJS框架培训●1、ExtJS 简介●2、ExtJS 基础组件●3、ExtJS组件之Panel●4、ExtJS 4.0布局●5、ExtJS与后台交互ExtJS简介●什么是ExtJS?•ExtJS是一个用javascript、CSS和HTML等技术实现的主要用于创建用户界面,且与后台技术无关的前端Ajax框架。

ExtJS 简介●ExtJS显示效果示例1ExtJS简介●ExtJS显示效果示例2ExtJS简介●认识ExtJS的开发包要开始ExtJS之旅的第一步是要获得开发包,可以从官方网站/下载。

下载地址是/products/extjs/downloa dExtJS简介●ExtJS4.0开发包的文件目录结构ExtJS简介●以下为其主要资源的简单介绍•builds:ExtJS压缩后的代码,经过压缩的代码体积更小,加载更快。

•docs:ExtJS的文档,其中最重要的是ExtJS的API。

•examples:官方的演示示例,通过对这些演示示例的熟悉,就能很快掌握ExtJS开发。

•locale:多国语言的资源文件,其中ext-lang-zh_CN.js是简体中文。

•pkgs:ExtJS各部分功能的打包文件。

•resources:ExtJS要用到的图片文件和样式表文件。

•src:目录是未压缩的源代码目录。

•bootstrap.js:Extjs库的引导文件,通过参数可以自动切换ext_all.js和ext_all_debug.js。

•ext_all.js:ExtJS的核心库,是必须要引入的。

•ext_all_debug.js:ext_all.js的调试版。

ExtJS简介●ExtJS API文档ExtJS简介●从Hello World开始•<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""/TR/html4/loose.dtd">•<html>•<head>•<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">•<title>Insert title here</title>•<link rel='stylesheet' type='text/css' href='./ext/resources/css/ext-all.css'>•<script type="text/javascript" src="./ext/bootstrap.js"></script>•<script type="text/javascript">•Ext.onReady(function(){Ext.MessageBox.alert('helloWorld',"I'm coming");•});•</script>•</head>•<body>•</body>•</html>ExtJS简介●HelloWorld运行效果如下图:ExtJS简介●ExtJS拦路虎•问题1:导入js文件后,在js文件中定义的中文显示在页面后出现乱码。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

理解Ext.util.Event由于Ext2.0中所有的组件都是由Observable继承而来,理解Ext就需要先从Ext.util.Observable说起,而Observable是对Event对象进行管理,从而理解Observable必须首先从Ext.util.Event说起。

Ext.util.Event是一个封装的非常精致的对象,但和你想象的不同,Event同任何的HTML DOM元素没有任何的关系(尽管Ext是处理HTML元素的),实际上,它是一个通用的事件及其事件的处理的对象。

也许有朋友要问,HTML Element本身已经支持了事件,为什么还要再重新设计一套Event机制呢?其实,基本上所有的javascript框架都会实现自己的Event机制,原因很多,但是至少有一点:HTML元素对于事件的处理是通过简单的单一绑定实现,也就是说,如果不进行任何的封装,你的事件只能唯一的绑定到一个事件处理句柄,举个例子:var e=document.getElementById("test");e.onclick=function(){alert("handle1")};e.onclick=function(){alert("handle2")};运行的结果你回发现,只会弹出一个"handle2"的alert框,因为第一个事件已经被第二个事件重载了。

而使用Ext框架,你可以放心的解决这个问题,同一个事件可以依次被绑定到多个事件处理句柄上。

Ext.util.Event对象构建器需要传入两个对象:obj(处理事件的缺省对象),name(事件名称)。

在构建Event对象时,Event对象会同时构建一个事件的处理函数的数组:listeners,通过这个数组实现了一个事件的多个事件句柄函数的处理。

Ext.util.Event = function(obj, name){ = name;this.obj = obj;this.listeners = [];};通过Event的fire方法就可以依次触发该数组中的处理函数。

实际上,fire方法在遍历listeners 数组中的处理函数过程中,只要处理函数的返回值为false,则不再继续运行后续的处理函数。

所以,可以通过检查fire方法的返回值得知事件处理函数是否完全被运行。

fire : function(){var ls = this.listeners, scope, len = ls.length;if(len > 0){this.firing = true;//通过firing可以保证多个事件处理函数不会并发运行var args = Array.prototype.slice.call(arguments, 0);//slice方法可以有效的进行数组的克隆for(var i = 0; i < len; i++){var l = ls;//事件的处理,只要有一个处理函数返回false,整个事件处理就被停止if(l.fireFn.apply(l.scope||this.obj||window, arguments) === false){this.firing = false;return false;}}this.firing = false;}return true;}Event可以通过addListener、removeListener、clearListeners(移除所有的事件处理函数)方法对listeners进行管理。

但是,Listener中保存的事件处理函数实际上并不是addListener 传递的函数,实际上,addListener传入的方法通过createListener对事件的处理函数进行了封装,通过封装,实现了对通一个重复事件的的三种不同处理方式:delay(延迟运行)、single(移除Listener中的处理函数,仅运行当前的处理函数)、buffer(避免重复运行处理函数)。

createListener : function(fn, scope, o){o = o || {};scope = scope || this.obj;var l = {fn: fn, scope: scope, options: o};var h = fn;if(o.delay){h = createDelayed(h, o, scope);}if(o.single){h = createSingle(h, this, fn, scope);}if(o.buffer){h = createBuffered(h, o, scope);}l.fireFn = h;return l;}var createBuffered = function(h, o, scope){var task = new Ext.util.DelayedTask();return function(){task.delay(o.buffer, h, scope, Array.prototype.slice.call(arguments, 0));};};var createSingle = function(h, e, fn, scope){return function(){e.removeListener(fn, scope);return h.apply(scope, arguments);};};var createDelayed = function(h, o, scope){return function(){var args = Array.prototype.slice.call(arguments, 0);setTimeout(function(){h.apply(scope, args);}, o.delay || 10);};};理解Ext.util.ObservableObservable维护了一个events数组,并提供了更加方便的对于事件的封装和调用机制。

同Event一样,它也提供了addListener、removeListener 方法。

它提供的addListenere方法使用起来更加方便,你可以通过json对象一次实现多个事件的绑定:foo.addListener({'click' : {fn: this.onClick,scope: this,delay: 100},'mouseover' : {fn: this.onMouseOver,scope: this},'mouseout' : {fn: this.onMouseOut,scope: this}})如果你看一下源程序,你会发现,实际上,observable最终还是把事件绑定机制委托到Event对象上:addListener : function(eventName, fn, scope, o){//如果参数是一个json对象if(typeof eventName == "object"){o = eventName;for(var e in o){if(this.filterOptRe.test(e)){continue;}if(typeof o[e] == "function"){// shared optionsthis.addListener(e, o[e], o.scope, o);}else{// individual optionsthis.addListener(e, o[e].fn, o[e].scope, o[e]);}}return;}o = (!o || typeof o == "boolean") ? {} : o;eventName = eventName.toLowerCase();var ce = this.events[eventName] || true;if(typeof ce == "boolean"){//事件不存在则新建一个Event对象并把它纳入event数组ce = new Ext.util.Event(this, eventName);this.events[eventName] = ce;}//调用event的addListener方法ce.addListener(fn, scope, o);}除了支持addListener方法,Obserable还提供了一个addEvent方法,通过该方法,Observable可以绑定多个不包含处理句柄的Event对象:addEvents : function(o){if(!this.events){this.events = {};}if(typeof o == 'string'){for(var i = 0, a = arguments, v; v = a; i++){if(!this.events[a]){o[a] = true;}}}else{Ext.applyIf(this.events, o);}},为了方便使用,observable对addListener和removeListener提供了一个更加简洁的所写:on和un:Ext.util.Observable.prototype.on = Ext.util.Observable.prototype.addListener;Ext.util.Observable.prototype.un = Ext.util.Observable.prototype.removeListener;你可以通过suspendEvents和resumeEvents方法随时对于事件进行暂停和继续:suspendEvents : function(){this.eventsSuspended = true;},resumeEvents : function(){this.eventsSuspended = false;},当然,通过fireEvent方法,你可以触发制定的事件:fireEvent : function(){if(this.eventsSuspended !== true){//arguments[0]就是你需要触发的事件var ce = this.events[arguments[0].toLowerCase()];if(typeof ce == "object"){return ce.fire.apply(ce, Array.prototype.slice.call(arguments, 1));}}return true;},Observable还通过capture和releaseCapture提供了对于事件处理函数的拦截机制:Ext.util.Observable.capture = function(o, fn, scope){o.fireEvent = o.fireEvent.createInterceptor(fn, scope);};Ext.util.Observable.releaseCapture = function(o){o.fireEvent = Ext.util.Observable.prototype.fireEvent;};Widget之父Component:总结在这里,我们引用Ext Overview中的Component life cycle对组件的功能进行相应的总结:[list=1]∙配置项对象生效:组件对象的构造器会把全部的配置项传入到其子类中去,并且进行下列所有的步骤。

相关文档
最新文档