深入浅出ExtJS 第二章 Ext框架基础
2.1 面向对象的基础架构(对象模型)
2.1.1 创建类
>.定义一个类:
Ext.define('demo.Demo',{
name:'Lingo',
hello:function () {
return 'Hello'+this.name;
}
});
//第一个参数是字符串类型的类名;
//第二个参数是object类型,其中可以填写这个类型的字段和函数;
>.创建一个对象:
var demo = new demo.Demo(); 2.1.2 对象继承(extend)
Ext.define('demo.DemoWindow',{
extend:'Ext.Window', //继承Ext.Window的所有功能;
title:'demo title', //扩展(设置标题);
initComponent:function(){ //初始化时默认添加两个子组件;
Ext.apply(this,{ //apply()将一批属性批量复制给当前对象;
items:[{html:'panel1'},{html:'panel2'}]
});
this.callParent(); //callParent()函数实现对父类函数的快捷调用;
}
}); 2.1.3 多重继承(mixin)
Ext.define('demo.DemoPanel',{
extend:'Ext.Window', //单根继承
mixins:['demo.Demo'] //混入(多重继承);将类'demo.Demo'的属性都复制给新类;
}); 2.1.4 自动生成代码
Ext.define('demo.DemoObject',{
statices:{ TYPE_DEFAULT : 0 }, //设置静态成员,无须创建对象即可直接调用的属性或函数;
constructor: function() { //在创建对象时执行初始化的构造函数;
//do some init;
}
})
2.2 统一的组件模型
2.2.1 Ext.Component
//所有Ext组件的基类,组件下所有的子类都可能参与自动化Ext组件的生命周期,执行创建/渲染和销毁;
var box = new Ext.Component({
el: 'test',
style: 'background-color:red; position:absoulte',
pageX: 100,
pageY: 50,,
width: 200,
height: 150
});
box.render(); 2.2.2 Ext.Panel
//Ext.Panel继承自Ext.Container;也可无须继承即可直接使用;
var panel = new Ext.Panel({
el:'test',
title:'测试标题',
floating:true,
shadow:true,
draggable:true,
collapsible:true,
html:'测试内容',
pageX:100,
pageY:50,
width:200,
height:150
});
panel.render(); 2.2.3 Ext.Container
//继承自Ext.Component;所有可布局组件的超类;
//参数layout:指定当前组件使用何种布局;
//参数items:包含的是当前组件中所有子组件;
new Ext.Viewport({
layout:'border',
items:[{
xtype:'panel'
region:'north'
},{
region:'south'
},{
region:'west'
},{
region:'east'
},{
region:'center'
}]
});
2.3 完善的事件机制(事件模型)
2.3.1 自定义事件
//所有继承自Ext.util.Observable类的控件都可以支持事件;
//为这些类的对象定义一些事件,为事件配置监听器;
//当某个事件被触发,Ext会自动调用对应的监听器,这就是Ext事件模型;
>1.Person类
Person = function(name){
this.name = name;
this.addEvents("walk","eat","sleep");
//初始化时调用addEvents()定义了3个事件;
}
Ext.extend(Person,Ext.util.Observable,{
//Person继承Observable所有属性;
info:function(){
return this.name+"is"+event+"ing.";
}
});
>2.为person添加事件监听器
var person = new Person('Lingo');
person.on('walk',function(){
//on()是addListener()的简写形式;
//参数一:传递事件名称;
//参数二:事件发生时执行的函数;
Ext.Msg.alert('event',person.name+"在走啊走.")
});
>3.触发person的事件
Ext.get('walk').on('click',function(){
//给walk按钮绑定点击事件;
person.fireEvent('walk');
//fireEvent()传入一个事件名称作为参数,该事件对应的监听函数就会执行;
}); 2.3.2 浏览器事件
//Ext使用Ext.EventManager/Ext.EventObject/Ext.libEvent对原生浏览器事件进行封装;
//原生事件处理是通过单一的绑定实现的,但每次只能给一个事件绑定一个事件处理函数;
//而Ext可以将同一个事件依次绑定到多个事件处理句柄上;
Ext.onReady(function(){
var test = Ext.get('test');
//Ext.get('test'):获得HTML中id="test"对应的按钮;
test.on('click',function(){
alert("handle1");
});
test.on('click',function(){
alert("handle2");
});
}); 2.3.3 Ext.EventObjectImpl
//Ext.EventObjectImpl是对事件的封装,将Ext自定义事件和浏览器事件结合在一起使用;
//它封装不同浏览器的事件处理函数,为上层组件提供了统一的功能接口;
>1.getX()/getY()/getXY():获得发生的事件在页面中的坐标位置;
>2.getTarget():返回事件的目标元素;
>3.on()/un():事件的绑定与清除;
>4.purgeElement():把元素上的所有事件都清除;
>5.preventDefault():取消浏览器对当前事件所执行的默认操作;
>6.stopPropagation():停止事件传递;(阻止冒泡);
>7.stopEvent():停止一个事件;(内部调用preventDefault()和stopPropagation()两个函数,取消浏览器的默认操作,同时停止事件传递);
>8.getRelatedTarget():返回与当前事件相关的元素;
>9.getWheelDelta():获取鼠标滚轮的delta值;
Ext.get('test').on('keypress',function(e){
//监听函数的参数e就是一个Ext.EventObjectImpl
if(e.charCode == Ext.EventObjectImpl.SPACE){
Ext.Msg.alert('info','空格');
}
}); 2.3.4 Ext.util.Observable
//位于Ext组件的顶端,为Ext组件提供处理事件最基本的功能;
//实现一个可以处理事件的Ext组件,最直接的方法就是继承Ext.util.Observable;
>1.复合式参数
Ext.get('test').on('click',fn,this,{
//click:事件名称; fn:click事件触发时执行的函数; this:fn执行时的作用域是this;
single:true, //表示这个事件处理函数仅执行一次;
delay:100, //延迟100ms后执行;
testId:4,
buffer:1000 //延迟执行,但会创建一个Ext.util.DelayTask对象;并把fn放入其中等待执行;若再次触发事件,则上一个fn会被取消,执行新的fn;这样保证fn不会重复执行多次;
});
var fn = function(e,el,args){
alert('handlel');
alert(args.testId);
//在事件监听函数中获得在符合函数参数中定义的数据;
}
>2.一次性定义多个事件监听器
Ext.get('test').on({
'click':{fn:fn},
'mouseover':{
fn:fn,
single:true,
delay:100
}
});
>3.captrue()拦截函数
Ext.get('capture1').on('click',function(){
Ext.util.Observable.capture(person,function(){
alert('capture1');
return true; //不会终止事件的发生;
//return false; //终止事件;
});
})
//通过控制capture()中处理函数的返回值来决定是继续执行某个事件的监听函数,还是直接终止;
//可以为一个对象设置多个capture()拦截函数;形成处理链;
>4.releaseCapture()
//清除fireEvent()上所有的拦截函数;
>5.suspendEvents()暂停函数
Ext.get('test').on('click',function(){
person.suspendEvents();
})
>6.resumeEvents()继续函数;
Ext.get('test').on('click',function(){
person.resumeEvents();
}) 2.3.5 Ext.EventManager 事件管理器
//定义了一系列与事件相关的处理函数;
>1.Ext.onReady()
//等页面文档渲染完毕但图片等还没下载时调用启动函数;
Ext.onReady(function(){
Ext.Msg.alert('message',Ext.get('test'));
//页面渲染之后获取id="test"的Element对象;
});
>2.onWindowResize()
//监听浏览器窗口大小变化;
Ext.EventManager.onWindowResize(function(width,height){
alert('width:'+width+'height:'+height);
});
2.4 小结
Ext基本功能架构,包括对象模型/组件模型和事件模型;Ext中所有的功能都建立在这些基本架构之上;
深入浅出ExtJS 第二章 Ext框架基础的更多相关文章
- Spring学习指南-第二章-Spring框架基础(完)
第二章 Spring框架基础 面向接口编程的设计方法 在上一章中,我们看到了一个依赖于其他类的POJO类包含了对其依赖项的具体类的引用.例如,FixedDepositController 类包含 ...
- jQuery系列 第二章 jQuery框架使用准备
第二章 jQuery框架使用准备 2.1 jQuery框架和JavaScript加载模式对比 jQuery框架的加载模式 <script> window.onload = function ...
- 第二章:python基础,数据类型
"""第二章:python基础,数据类型2.1 变量及身份运算补充2.2 二进制数2.3 字符编码每8位所占的空间位一个比特,这是计算机中最小的表示单位.每8个比特组成一 ...
- 第二章 TCP/IP 基础知识
第二章 TCP/IP 基础知识 TCP/IP transmission control protocol and ip internet protocol 是互联网众多通信协议中最为著名的. ...
- C#高级编程 (第六版) 学习 第二章:C#基础
第二章 基础 1,helloworld示例: helloworld.cs using System; using System.Collections.Generic; using System.Li ...
- 网络安全从入门到精通 (第二章-6) 后端基础PHP—表单验证
本文内容: 什么是表单? 如何创建一个表单: 接收并验证: PHP和数据库交互 1,什么事表单? 表单在网页中主要负责数据采集. 表单由三部分组成: 表单标签:这里面包含了处理表单数据所用动态脚本的U ...
- ExtJs 第二章,Ext.form.Basic表单操作
1.认识Ext.form.Panel表单面板 Ext.form.field.CheckBox 复选框 checkboxfield Ext.form.CheckBoxGroup 复选框组 ...
- 第二章 Rest框架 Nancy
正如你看到的,Nancy有两个主要用途. 其中第一项是作为一种通用的基于 REST 框架,可替代 ASP.NET Web API 或其他Rest工具包. 默认情况下,Nancy提供一流的路由和内容协商 ...
- [翻译]Spring框架参考文档(V4.3.3)-第二章Spring框架介绍 2.1 2.2 翻译--2.3待继续
英文链接:http://docs.spring.io/spring-framework/docs/current/spring-framework-reference/html/overview.ht ...
随机推荐
- Java中String对象的不可变性
首先看一个程序 package reverse; public class Reverse { public static void main(String[] args) { String c1=n ...
- WOSA/XFS及SP综述
转自 http://blog.csdn.net/andyhou/article/details/6888416 前言: 写给ATM硬件和软件人员的无言歌. 希望对工作 ...
- Objective-C语法之代码块(block)的使用
代码块本质上是和其它变量相似.不同的是,代码块存储的数据是一个函数体.使用代码块是,你能够像调用其它标准函数一样,传入參数数,并得到返回值. 脱字符(^)是块的语法标记.依照我们熟悉的參数语法规约所定 ...
- 在ASP.NET中支持断点续传下载大文件(ZT)
IE的自带下载功能中没有断点续传功能,要实现断点续传功能,需要用到HTTP协议中鲜为人知的几个响应头和请求头. 一. 两个必要响应头Accept-Ranges.ETag 客户端每次提交 ...
- jQuery打印Html页面自动分页
最近项目中需要用到打印HTML页面,需要指定区域打印,使用jquery.PrintArea.js 插件 用法: $("div#printmain").printArea(); 但还 ...
- hdu 5286 How far away ? tarjan/lca
How far away ? Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pi ...
- git项目添加.gitigore文件
以前一直没有注意这个文件,最近读到了黄勇的<架构探险>,觉得这个文件还是很有用的. .gitigore文件可以自己配置. 我使用的是书中所用的配置,简洁明了. # Maven # targ ...
- 高效编程之cache命中对于程序性能的影响
下面这个代码用两个双层循环遍历了一个二维数组里所有的元素,以我自己机器的测试 上面那个循环耗时基本为下面的一半,两个循环的时间复杂度相同,为什么会有这么大的差别? 首先要明白的是不管是几维数组,他们都 ...
- [STAThread]的含义
Posted on 2007-07-07 10:06 桦林 阅读(33100) 评论(10) 编辑 收藏 [STAThread]STAThread:Single Thread Apar ...
- 512字节纠错1位的ECC校验码生成演示
Flash型号: NandFlash型号:TC58NVG2S3ETA00 pagesize: 2KB oobsize : 64B blocksize : 128K 关于ECC可以参考:http:// ...