深入浅出ExtJS 第二章 Ext框架基础

 1 2.1 面向对象的基础架构(对象模型)  2 2.1.1 创建类

 3   >.定义一个类:

 4   Ext.define('demo.Demo',{

 5     name:'Lingo',

 6     hello:function () {

 7       return 'Hello'+this.name;

 8     }

 9   });

10   //第一个参数是字符串类型的类名;

11   //第二个参数是object类型,其中可以填写这个类型的字段和函数;

12   >.创建一个对象:

13   var demo = new demo.Demo();

14 

15 2.1.2 对象继承(extend)

16   Ext.define('demo.DemoWindow',{

17     extend:'Ext.Window',        //继承Ext.Window的所有功能;

18     title:'demo title',         //扩展(设置标题);

19     initComponent:function(){   //初始化时默认添加两个子组件;

20       Ext.apply(this,{          //apply()将一批属性批量复制给当前对象;

21         items:[{html:'panel1'},{html:'panel2'}]

22       });

23       this.callParent();        //callParent()函数实现对父类函数的快捷调用;

24     }

25   });

26 

27 2.1.3 多重继承(mixin)

28   Ext.define('demo.DemoPanel',{

29     extend:'Ext.Window',        //单根继承

30     mixins:['demo.Demo']        //混入(多重继承);将类'demo.Demo'的属性都复制给新类;

31   });

32 

33 2.1.4 自动生成代码

34   Ext.define('demo.DemoObject',{

35     statices:{ TYPE_DEFAULT : 0 },  //设置静态成员,无须创建对象即可直接调用的属性或函数;

36     constructor: function() {       //在创建对象时执行初始化的构造函数;

37       //do some init;

38     }

39   })

 

 1 2.2 统一的组件模型  2 2.2.1 Ext.Component

 3 //所有Ext组件的基类,组件下所有的子类都可能参与自动化Ext组件的生命周期,执行创建/渲染和销毁;

 4   var box = new Ext.Component({

 5     el: 'test',

 6     style: 'background-color:red; position:absoulte',

 7     pageX: 100,

 8     pageY: 50,,

 9     width: 200,

10     height: 150 

11   });

12   box.render();

13 

14 2.2.2 Ext.Panel

15 //Ext.Panel继承自Ext.Container;也可无须继承即可直接使用;

16   var panel = new Ext.Panel({

17     el:'test',

18     title:'测试标题',

19     floating:true,

20     shadow:true,

21     draggable:true,

22     collapsible:true,

23     html:'测试内容',

24     pageX:100,

25     pageY:50,

26     width:200,

27     height:150

28   });

29   panel.render();

30 

31 2.2.3 Ext.Container

32 //继承自Ext.Component;所有可布局组件的超类;

33 //参数layout:指定当前组件使用何种布局;

34 //参数items:包含的是当前组件中所有子组件;

35   new Ext.Viewport({

36     layout:'border',

37     items:[{

38       xtype:'panel'

39       region:'north'

40     },{

41       region:'south'

42     },{

43       region:'west'

44     },{

45       region:'east'

46     },{

47       region:'center'

48     }]

49   });

 

  1 2.3 完善的事件机制(事件模型)   2 2.3.1 自定义事件

  3 //所有继承自Ext.util.Observable类的控件都可以支持事件;

  4 //为这些类的对象定义一些事件,为事件配置监听器;

  5 //当某个事件被触发,Ext会自动调用对应的监听器,这就是Ext事件模型;

  6   >1.Person类

  7   Person = function(name){    

  8     this.name = name;

  9     this.addEvents("walk","eat","sleep");   

 10     //初始化时调用addEvents()定义了3个事件;

 11   }

 12   Ext.extend(Person,Ext.util.Observable,{   

 13     //Person继承Observable所有属性;

 14     info:function(){          

 15       return this.name+"is"+event+"ing.";

 16     }

 17   });

 18   >2.为person添加事件监听器

 19   var person = new Person('Lingo');

 20   person.on('walk',function(){

 21     //on()是addListener()的简写形式;

 22     //参数一:传递事件名称;

 23     //参数二:事件发生时执行的函数;

 24     Ext.Msg.alert('event',person.name+"在走啊走.")

 25   });

 26   >3.触发person的事件

 27   Ext.get('walk').on('click',function(){      

 28   //给walk按钮绑定点击事件;

 29     person.fireEvent('walk');         

 30     //fireEvent()传入一个事件名称作为参数,该事件对应的监听函数就会执行;

 31   });

 32 

 33 2.3.2 浏览器事件

 34 //Ext使用Ext.EventManager/Ext.EventObject/Ext.libEvent对原生浏览器事件进行封装;

 35 //原生事件处理是通过单一的绑定实现的,但每次只能给一个事件绑定一个事件处理函数;

 36 //而Ext可以将同一个事件依次绑定到多个事件处理句柄上;

 37   Ext.onReady(function(){

 38     var test = Ext.get('test');

 39     //Ext.get('test'):获得HTML中id="test"对应的按钮;

 40     test.on('click',function(){

 41       alert("handle1");

 42     });

 43     test.on('click',function(){

 44       alert("handle2");

 45     });

 46   });

 47 

 48 2.3.3 Ext.EventObjectImpl

 49 //Ext.EventObjectImpl是对事件的封装,将Ext自定义事件和浏览器事件结合在一起使用;

 50 //它封装不同浏览器的事件处理函数,为上层组件提供了统一的功能接口;

 51   >1.getX()/getY()/getXY():获得发生的事件在页面中的坐标位置;

 52   >2.getTarget():返回事件的目标元素;

 53   >3.on()/un():事件的绑定与清除;

 54   >4.purgeElement():把元素上的所有事件都清除;

 55   >5.preventDefault():取消浏览器对当前事件所执行的默认操作;

 56   >6.stopPropagation():停止事件传递;(阻止冒泡);

 57   >7.stopEvent():停止一个事件;(内部调用preventDefault()和stopPropagation()两个函数,取消浏览器的默认操作,同时停止事件传递);

 58   >8.getRelatedTarget():返回与当前事件相关的元素;

 59   >9.getWheelDelta():获取鼠标滚轮的delta值;

 60   Ext.get('test').on('keypress',function(e){

 61     //监听函数的参数e就是一个Ext.EventObjectImpl

 62     if(e.charCode == Ext.EventObjectImpl.SPACE){

 63       Ext.Msg.alert('info','空格');

 64     }

 65   });

 66 

 67 2.3.4 Ext.util.Observable

 68 //位于Ext组件的顶端,为Ext组件提供处理事件最基本的功能;

 69 //实现一个可以处理事件的Ext组件,最直接的方法就是继承Ext.util.Observable;

 70   >1.复合式参数

 71   Ext.get('test').on('click',fn,this,{

 72     //click:事件名称;   fn:click事件触发时执行的函数;   this:fn执行时的作用域是this;

 73     single:true,  //表示这个事件处理函数仅执行一次;

 74     delay:100,    //延迟100ms后执行;

 75     testId:4,

 76     buffer:1000   //延迟执行,但会创建一个Ext.util.DelayTask对象;并把fn放入其中等待执行;若再次触发事件,则上一个fn会被取消,执行新的fn;这样保证fn不会重复执行多次;

 77   });

 78   var fn = function(e,el,args){

 79     alert('handlel');

 80     alert(args.testId);

 81     //在事件监听函数中获得在符合函数参数中定义的数据;

 82   }

 83   >2.一次性定义多个事件监听器

 84   Ext.get('test').on({

 85     'click':{fn:fn},

 86     'mouseover':{

 87       fn:fn,

 88       single:true,

 89       delay:100

 90     }

 91   });

 92   >3.captrue()拦截函数

 93   Ext.get('capture1').on('click',function(){

 94     Ext.util.Observable.capture(person,function(){

 95       alert('capture1');

 96       return true;        //不会终止事件的发生;

 97       //return false;     //终止事件;

 98     });

 99   })

100   //通过控制capture()中处理函数的返回值来决定是继续执行某个事件的监听函数,还是直接终止;

101   //可以为一个对象设置多个capture()拦截函数;形成处理链;

102   >4.releaseCapture()

103   //清除fireEvent()上所有的拦截函数;

104   >5.suspendEvents()暂停函数

105   Ext.get('test').on('click',function(){

106     person.suspendEvents();

107   })

108   >6.resumeEvents()继续函数;

109   Ext.get('test').on('click',function(){

110     person.resumeEvents();

111   })

112 

113 2.3.5 Ext.EventManager 事件管理器

114 //定义了一系列与事件相关的处理函数;

115   >1.Ext.onReady()

116   //等页面文档渲染完毕但图片等还没下载时调用启动函数;

117   Ext.onReady(function(){

118     Ext.Msg.alert('message',Ext.get('test'));

119     //页面渲染之后获取id="test"的Element对象;

120   });

121   >2.onWindowResize()

122   //监听浏览器窗口大小变化;

123   Ext.EventManager.onWindowResize(function(width,height){

124     alert('width:'+width+'height:'+height);

125   });

 

1 2.4 小结 2 Ext基本功能架构,包括对象模型/组件模型和事件模型;Ext中所有的功能都建立在这些基本架构之上;

你可能感兴趣的:(ExtJs)