文章目錄
轉:Ext學習及應用經驗小結
一、理解Html DOM、Ext Element及Component
要學習及應用好Ext架構,需要理解Html DOM、Ext Element及Component三者的區別。
Ext是基於Web的富用戶端架構,其完全是基於標準W3C技術構建設的,使用到的都是HTML、CSS、DIV等相關技術。Ext最傑出之處,是開發了一系列非常簡單易用的控制項及組件,我們只需要使用這些組件就能實現各種豐富多彩的UI的開發。
無論組件有多少配置屬性、還是事件、方法等等,其最終都會轉化為HTML在瀏覽器上顯示出來,而每一個HTML頁面都有一個層次分明的DOM樹模型,瀏覽器中的所有內容都有相應的DOM對象,動態改變頁面的內容,正是通過使用指令碼語言來操作DOM對象實現。
僅僅有DOM是不夠的,比如要把頁面中的某一個節點移到其它位置,要給某一個節點添加陰影製作效果,要隱藏或顯示某一個節點等,我們都需要通過幾句javascript才能完成。因此,Ext在DOM的基礎上,建立了Ext Element,可以使用Element來封裝任何DOM,Element對象中添加了一系列快捷、簡便的實用方法。
對於終端使用者來說,僅僅有Element是不夠的,比如使用者要顯示一個表格、要顯示一棵樹、要顯示一個快顯視窗等。因此,除了Element以外,Ext還建立了一系列的用戶端介面組件Component,我們在編程時,只要使用這些組件Componet即可實現相關資料展示及互動等,而Component是較高層次的抽象,每一個組件在渲染render的時候,都會依次通過Element、DOM來產生最終的頁面效果。
在使用Ext開發的應用程式中,組件Component是最高層次的抽象,是直接給使用者使用的,Ext Element是Ext的底層API,主要是由Ext或自訂群組件調用的,而DOM是W3C標準定義的原始API,Ext的Element通過操作DOM來實現頁面的效果顯示。
在Ext中,組件渲染以後可以通過訪問組件的el屬性來得到組件對應的Element,通過訪問Element的dom屬性可以得到其下面的DOM對象。另外,我們可以通過通過Ext類的快捷方法getCmp、get、getDom等方法來得組件Component、Ext元素Element及DOM節點。比如:
var view=new Ext.Viewport();//建立了一個組件Component
view.el.setOpacity(.5);//調用Element的setOpacity方法
view.el.dom.innerHTML="Hello Ext";//通過Element的dom屬性操作DOM對象
再看下面的代碼:
var win=new Ext.Window({id:"win1",title:"我的視窗",width:200,height:200});
win.show();
var c=Ext.getCmp("win1");//得到組件win
var e=Ext.get("win1");//根據id得到組件win相應的Element
var dom=Ext.getDom("win1");//得到id為win1的DOM節點
二、熟悉ext組件體系
Ext2.0對整個架構進行了重構,最為傑出的是推出了一個以Component類為基礎的組件體系,在Component類基礎上,使用物件導向的方法,設計了一系列的組件及控制項。因此,要能遊刃有餘地使用Ext,熟悉Ext組件體系是最基本的。
在《ExtJS實用開發指南》中,有如下面一幅元件圖表:
通過組件結構圖我們可以一目瞭然的看出整個Ext組件繼承及組成體系,當使用一個組件的時間,瞭解他的繼承體系,這樣可以便於我們掌握組件的各種特性。
三、掌握核心控制項
控制項其實也是組件,比如用於顯示樹資訊的TreePanel、用於顯示表格的GridPanel及EditorGridPanel,還有代表應用程式視窗的Ext.Window等都屬於Ext控制項。在使用Ext的時候,一定要掌握一些核心控制項,特別是處於基類的控制項。比如上面提到的幾個控制項,他們都是繼承於面板Panel,所以我們要重點掌握面板這個核心控制項的特性。比如面板由以下幾個部分組成:一個頂部工具列(tbar)、一個底部工具列(bbar)、面板頭部(header)、面板尾部(bottom)、面板主地區(body)幾個部分組成。面板類中還內建了面板展開、關閉等功能,並提供一系列可重用的工具按鈕使得我們可以輕鬆實現自訂的行為,面板可以放入其它任何容器中,面板本身是一個容器,他裡面又可以包含各種其它組件。只要掌握了Panel的應用,那麼學習TreePanel、Window等就會變得簡單得多。
同樣的道理,對於Ext的表單欄位來說,不管是ComboBox,NumberField、還是DateField,他們其它都是Ext.form.Field類的子類,在他上面定義了表單欄位的各種基本操作及特性。在學習使用表單欄位組件時,一定要重點研究Field這個類,掌握他的主要方法、事件等,就能有助於更好的學習使用其它的欄位。
四、學習及研究樣本
由於javascript語言非常靈活,不像靜態強型別語言(比如Java)那樣有固定的代碼設計模式,而往往是不同的人就有不同的編程風格。在實際應用開發中,只有見多識廣,才能在自己的在腦中建立一個開發庫。
學習別人的樣本對於我們開發協助會非常大,樣本包括基本組件的應用、綜合應用等多個方面。在此,簡單推薦幾個。
1、Ext官方樣本,在ext項目下載包的examples目錄中,包括各個控制項的基本應用示範,同時還有一些比較複雜的組合樣本,有簡有繁,非常適合初學者認真研究。
2、Vifir推出的樣本,Vifir推出的一些樣本主要包括兩類,一種是開源的樣本應用,另外一種是針對VIP使用者的實用樣本。開源的樣本主要是指wlr單使用者blog系統,這個一個集合了前後台技術的ext綜合樣本,而針對VIP使用者的實用樣本則是可以作為開發骨架或向外延展群組件的樣本。
3、其它樣本,在ext社區中還有很多比較優秀的ext應用樣本,有些只是一個應用示範,雖然沒有提供源碼下載,但我們可以直接下載引用的js檔案來得到這些樣本的ext應用代碼,同樣能取起到非常好的學習效果。
五、多運用
Ext看起來是非常簡單的東西,稍有點編程知識的人,按照《ExtJS實用開發指南》中的入門指南,半小時就能學會使用Ext。然而,當準備使用Ext開發一個項目時,卻不知道從何處入手,或者是在使用Ext的時候,出了一點小問題自己不知道該如何解決。編程是一門實踐性的科學,僅僅靠看書、看別人寫的代碼是遠遠不夠的,因此,必須多做實踐才行,只有通過不斷的練習,大量的使用,才能對Ext的組件特性、事件、事件處理機制以及與伺服器端互動介面等深入的掌握,只有多做運用,深入瞭解ext的組件的工作原理及機制,才能編寫出進階的Ext的應用。
六、熟讀Ext項目的原始碼
如果要想深入應用Ext,那麼閱讀Ext項目的原始碼這是必不可少的環節,Ext的代碼品質非常高,通過閱讀他的代碼我們可以更加深刻的瞭解javascript物件導向編程,Ext代碼中包含了很多進階的js技巧以及設計模式。在使用Ext的過程中,我們經常根據項目的需要對Ext組件進行擴充,設計自己的組件或控制項,而如何?一個自訂的Ext組件,我們可以從Ext的各個組件原始碼中找到答案。
Ext的原始碼在Ext項目的source目錄。讀Ext源碼,並不一定非要從某一個地方開始,而組件核心代碼Component.js、容器組件代碼Container.js、面板Panel.js等這些是必看的; core目錄中的Element.js、Ext.js等也是必看的。當需要從一個控制項進行擴充的時候,最好能簡單看一看這個控制項的原始碼。