深入浅出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 ...
随机推荐
- cocos2dx shader实现灰度图android后台切换回来导致图像偏移的问题
转自:http://www.tuicool.com/articles/U3URRrI 项目中经常会遇到将一张图像处理成灰色的需求,为了节省资源,一般不会让美术再做一套同样的灰度图,通常会通过代码处理让 ...
- Microchip 125 kHz RFID System Design Guide
Passive RFID Basics - AN680 INTRODUCTION Radio Frequency Identification (RFID) systems use radio fre ...
- 常用CSS3效果:用text-shadow做CSS3 文字描边
思路: 利用CSS3的text-shadow属性,对文字的四个边均用阴影. 最终效果: 单纯的为了实现效果.未作任何美化. 实现代码: HTML: <div>文字描边效果</div& ...
- 书写CSS需要注意的地方
1.注意对图片设置宽高和转化为块2.文字超出的设置3.空白部分用空div来设置4.做之前考虑重用,重用部分命名不要和内容相关 尽量公共(comWidth area small big img list ...
- win8 企业版 安装 .net2.0 .net 3.5
Windows 8 默认集成 .Net Framework 4.5,因此运行一些基于3.5或以前版本的程序时会弹出这个提示. 2012-3-2 15:24 上传 下载附件 (23.91 KB) 这 ...
- Codeforces Round #180 (Div. 2) D. Fish Weight 贪心
D. Fish Weight 题目连接: http://www.codeforces.com/contest/298/problem/D Description It is known that th ...
- UBIFS FAQ and HOWTO
转:http://www.linux-mtd.infradead.org/faq/ubifs.html UBIFS FAQ and HOWTO Table of contents How do I e ...
- windows10上安装 .NET Framework 3.5
在安装一些软件时,需要 .NET Framework3.5.按照windows给的提示下载不了.在官方网站上给了解决方案: 运行 DISM 工具 从屏幕右边缘向中间轻扫,然后点击“搜索”.(如果使用的 ...
- storm0.9.0.1安装
storm 0.9.x的好处是引入了netty进行网络传输(需要配置),不用再依赖zeromq和jzmq了 1.下载安装zookeeper ... 2.下载安装storm依赖库 JDK1.6及以上 . ...
- IOS 按比例裁剪图片
拍照或者从图片库中获取图片 操作过程中容易闪退,也总会有内存压力警告,第一步,首先可以考虑裁剪图片,实际上可能不需要那么大的.其次可以考虑把耗时的比如存储过程放进线程. 这里封装裁剪图片的类方法. / ...