一直感觉Ext在前台方面效果做的比较酷,最近想抽时间学习一下,应用到自己的项目中;下面是在学习各种Ext相关文档、博客以及论坛过程中汇总的一些知识点以及解惑。 (如有侵权请留言)
概念:
(1)ExtJS是一个面向开发RIA也即富客户端 的AJAX应用,是一个用javascript写的,主要用于创建前端用户界面,是一个与后台技术无关的前端ajax框架。(以前是基于YAHOO-UI ,现在已经完全独立了)
(2)之所以说是框架,因为它能够帮助我们在页面上快速而简单构建各种各样的控件,简化我们自己去写庞大js实现;它是一种纯面向对象的JS框架。扩展性相当的好,可以自己写扩展,自己定义命名空间,web应用可能感觉太大,不过您可以根据需要按需动态的加载您想要的类库就可以了,避免了网络传输流量问题。
(3)它提供了丰富的,非常漂亮的外观体验,成为众多界面层开发人员的追捧,更重要的是它核心的组件基本覆盖了我们构建富客户端 的常用的组件以及各种功能,在统计方面做的也非常出色。
(4)在3.0的时候提供了类似与dwr的方式调用后台代码,交互更加简单;4.0版本又提出了MVC模式的开发,支持组件化、模块插拔化设计以及提供本地数据源的支持。
第一章 EXTJS的基本概念
1. 组件component : 能够以图形化形式呈现界面的类,其中还可以分为容器组件与元件组件。
2. 类
提供功能的非图形可形的类,它们为图形类提供了有力的支持
按其功能可分为:数据支持类(Data)、拖放支持类(DD)、布局支持类(layout)、本地状态存储支持类(state)、实用工具类(Util)。
密封类:不能被扩展的类
原型类:扩展了javascript标准类库中的类
3. 方法
作为类的功能体现,能够产生改变对象本身产生变化的直接因素
方法按访问形式可分为公有方法与私有方法。但由于javascript从原理上根本不支持这种结构,因此在EXTJS中,私有与公有方法完全凭借着用户自觉,没有像JAVA那样的强制性。
4. 事件
由类定义的,并且可以在类对象自身状态发生改变的触发。
只有被定阅的事件才会有效
如果不需要此事件,应该进行退定,增强程序的执行效率。
5. 配置选项
用以初始化一个EXTJS类对象的手段
注意,配置选项并不一定就是属性,总算是属性,也有可能出现属性返回的类型与你当初指定的配置选项类型不一致的情况。
6. 属性
能够在程序运行期间,能够被访问,用以了解当前类对象的状态。
在实际的编程中,EXTJS的属性设置,比较差劲,需要通过了解其源代码,才能了解各种实用属性的用处。
7. 命名空间
能够将编写好的EXTJS类进行有效组织的手段。
这个也是EXTJS能够称之为优秀AJAX框架的特征之一。
第二章 Ext4.0新特性以及常用数据处理功能
1. extjs4.0对原生javaScript功能进行了扩展(API中的Utilities模块中的NativeExtensions)
Utilities:常用的一些工具处理类
Native Extensions
Ext.Array
Ext.Number
Ext.Object
Ext.String
Ext.JSON
Ext.Date
Ext.Function
具体扩展了那些,请参照具体的API说明,扩展的原理eg:
var Person = {name:'yfc',age:26}; //alert(Person['name']); //extjs4.0提供getKey的函数 //alert(Ext.Object.getKey(Person,'yfc')); Object.prototype.getValue = function(key,defValue){ if(this[key]){ return this[key]; }else{ return defValue; } } alert(Person.getValue("email","[email protected]")); //由于给Object的原型加上了一个getValue的函数,这样所有的对象(都继承Object)默认都会拥有这个函数。
2. 事件机制与新特性
(1)给对象加事件:
Ext.get("元素ID").on("click",function(){ //函数处理部分 });
(2)新特性:create与define(extend 、requires、config、mixins、alias以及statics )。
//create第一个参数为类路径,第二个参数为该类的一些初始化参数值(以对象的形式传递) var win = Ext.create('Ext.window.Window',{ width:400, height:300, title:'uspcat' }); win.show();
var o = { say : function(){ alert(11111); } } //通过o.say()调用函数 var fn = Ext.Function.alias(o,'say'); fn();//通过别名的方式我们就可以直接调用fn()等于o.say()。
//create第一个参数是类的全路径,第二个参数则是类的内容 Ext.define('Bmsys.ml.Window', { extend:'Ext.window.Window', title: 'Window', closeAction: 'hide', width: 380, height: 300, resizable: false, modal: true, //定义一些自己的扩展参数 myTitile: 'myWindow', setTitle: function(){ this.title = this.myTitle; } //初始化的方法(类似java中的构造方法) initComponent: function(){ this.setTitle(); this.callParent(arguments); } }); var win = Ext.create('Bmsys.ml.Window',{ titile: 'youWindow'; } ); win.show();//此时创建出来窗体的标题是myWindow,说明创建时,传入的初始化参数比构造器先执行。
注意:属性只能在define时定义,不能通过win.myHeight = function(){...}添加属性。
//这时候要启用自动加载 Ext.Loader.setConfig({ enabled:true, paths:{ myApp:'js/Bmsys/ml' //js文件相对路径,需要与命名空间保持一致 } }); //这时候只要保证Window.js放在js/Bmsys/ml这个目录下命名空间为Bmsys.ml.Window就可以了。 //这时就不需要在JSP文件中引入Window.js,等到下面的程序被执行时,才会根据命名空间去到后台加载Window.js。 //原理就是通过命名空间与文件路径,拼接好后通过写入