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框架基础的更多相关文章

  1. Spring学习指南-第二章-Spring框架基础(完)

    第二章 Spring框架基础 面向接口编程的设计方法 ​ 在上一章中,我们看到了一个依赖于其他类的POJO类包含了对其依赖项的具体类的引用.例如,FixedDepositController 类包含 ...

  2. jQuery系列 第二章 jQuery框架使用准备

    第二章 jQuery框架使用准备 2.1 jQuery框架和JavaScript加载模式对比 jQuery框架的加载模式 <script> window.onload = function ...

  3. 第二章:python基础,数据类型

    """第二章:python基础,数据类型2.1 变量及身份运算补充2.2 二进制数2.3 字符编码每8位所占的空间位一个比特,这是计算机中最小的表示单位.每8个比特组成一 ...

  4. 第二章 TCP/IP 基础知识

    第二章 TCP/IP 基础知识   TCP/IP  transmission control protocol and ip internet protocol 是互联网众多通信协议中最为著名的.   ...

  5. C#高级编程 (第六版) 学习 第二章:C#基础

    第二章 基础 1,helloworld示例: helloworld.cs using System; using System.Collections.Generic; using System.Li ...

  6. 网络安全从入门到精通 (第二章-6) 后端基础PHP—表单验证

    本文内容: 什么是表单? 如何创建一个表单: 接收并验证: PHP和数据库交互 1,什么事表单? 表单在网页中主要负责数据采集. 表单由三部分组成: 表单标签:这里面包含了处理表单数据所用动态脚本的U ...

  7. ExtJs 第二章,Ext.form.Basic表单操作

    1.认识Ext.form.Panel表单面板         Ext.form.field.CheckBox 复选框 checkboxfield Ext.form.CheckBoxGroup 复选框组 ...

  8. 第二章 Rest框架 Nancy

    正如你看到的,Nancy有两个主要用途. 其中第一项是作为一种通用的基于 REST 框架,可替代 ASP.NET Web API 或其他Rest工具包. 默认情况下,Nancy提供一流的路由和内容协商 ...

  9. [翻译]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 ...

随机推荐

  1. VS2015生成64位dll文件

    导入自己的源文件,准备生成DLL文件.也可以自己创建. 右键项目,进入属性,修改Configuration Type 为 DLL. 修改为64位,Configureation Manager -> ...

  2. STM32 DFU -- Device Firmware Upgrade

    DFU Class Requests Get Status The Host employs the DFU_GETSTATUS request to facilitate synchronizati ...

  3. PL/pgSQL学习笔记之三

    http://www.postgresql.org/docs/9.1/static/plpgsql-overview.html 39.1.2. Supported Argument and Resul ...

  4. CSS布局经验谈

    1.盒子模型 CSS最具特色也是最本质的可以浓缩成盒子模型. 整个页面可以通过大盒子套小盒子,盒子挨着盒子放,摆成一个页面即可. 盒子即所谓的块元素,只有块元素才有宽和高,有了宽和高才能使盒子挨着盒子 ...

  5. Python 条件语句

    Python条件语句是通过一条或多条语句的执行结果(True或者False)来决定执行的代码块. Python程序语言指定任何非0和非空(null)值为true,0 或者 null为false. Py ...

  6. Codeforces Gym 100015G Guessing Game 差分约束

    Guessing Game 题目连接: http://codeforces.com/gym/100015/attachments Description Jaehyun has two lists o ...

  7. C#打包制作安装程序过程全记录

    该文是根据网上的文章并结合自己实际打包的过程而整理的. 开发平台:VisualStudio2005中文版. 步骤如下: 1. 创建一个安装向导项目或安装部署项目 新建项目-〉其他项目类型-〉安装与部署 ...

  8. xmf 翻译

    避免在详细信息视图的确认对话框显示? https://documentation.devexpress.com/#Xaf/CustomDocument3160 我如何获得从登录窗口应用程序的数据库? ...

  9. 【JavaScript】JavaScript脚本代码的位置及在页面中的执行顺序

    三.如何改变Javascript在页面的执行顺序 利用onload <script type="text/javascript">window.onload = f; ...

  10. iOS开发——多线程OC篇&多线程中的单例

    多线程中的单例 #import "DemoObj.h" @implementation DemoObj static DemoObj *instance; // 在iOS中,所有对 ...