深入淺出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中所有的功能都建立在這些基本架構之上;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM