透視Ext JS 4類背後的機制與特點(中)

配置項config

最後要說明的是“config”配置項對象。配置項對象就是Ext組件的參數,它以對象的key/value形式出現。大多數的配置項可以在運行時作改變。上面的例子中,我們聲明瞭Ext.Windows的“title”配置項,默認值爲“Window Title”。設置類的期間就會有這四個方法給我們: getTitle(),setTitle(),resetTitle()和applyTitle()。

  • getTitle – 返回當前標題。
  • setTitle – 設置新的標題。
  • resetTitle – 恢復標題的默認值(“Window Title”)
  • applyTitle – 這是一個你可以定義的模板方法。當執行setTitle時就會執行。

也就說,當改變標題的時候隨之就會執行applyTitle方法。例如我們想更新標題的DOM元素如下。

  1. Ext.define(‘Ext.Window’, {  
  2.     //..如上,  
  3.     config: {  
  4.         title: 'Window Title'  
  5.     },  
  6.     // 更新標題其所在的DOM innerHTML。  
  7.     applyTitle: function(newTitle) {  
  8.         this.titleEl.update(newTitle);  
  9.     }  
  10. });  

這一切都是自動化的,節省了編碼時間之餘還帶來可維護性的提高。

tips:若不能讀取配置項,可在構造器中執行:Ext.Base.initConfig()。

走近點去看

以上這些多態、靜態項、配置項getter/setter都不是魔法,卻給基於Prototype OO相對簡單的JavaScript帶來神奇般的效果,原因在於:

  • Ext.Base – 任何一個類都會繼承的Ext.Base。它是居於最底層的一個類。
  • Ext.Class – 創建新的類工廠。
  • Ext.ClassLoader – 加載器用於保證頁面上找不到類所進行的工作。
  • Ext.ClassManager –啓動類的創建過程和管理依賴關係。

所列對象都是幕後的功臣,它們爲你定義和使用某一個類都作出自己應有的貢獻,而你卻不一定要全部知曉它們內部細節怎麼樣,懂得如何運用即可。但是對於充滿好奇心的俺們怎能夠滿足於此呢?還是讓在下爲我們揭開魔法的奧祕吧!其實,你常所用的兩個函數 Ext.define和Ext.create不約而同地都來自Ext.ClassManager的方法,而背後的思路,就是利用其他三個類來綜合打造你所寫的類。

要注意Ext.Class和Ext.Base之間的區別才能搞清楚問題。Ext.Base是爲每一個類而設的最頂層超類,換言之,每一個類都繼承於Ext.Base(所有類的抽象類)。Ext.Class就只是一個單獨意義上的類(僅爲類本身所服務。可認爲類的類),每一個類對象都是 Ext.Class的實例,當然,還是Ext.Base的子類(Ext.Class的超類有Ext.Base)。爲說明清楚,我們創建一個最簡單的類。沒有繼承其他類。

  1. Ext.define( 'MyClass' , {  
  2.     someFunction: function () {  
  3.         console.log( 'Ran some function' );  
  4.     }  
  5. });  

因爲沒有繼承其他類,所以MyClass的基類就是Ext.Base。我們可以透過一個樹狀的關係圖來認識上述的關係。

該樹狀圖由上至下演示了類的整個繼承結構,根對象就是Ext.Base,每一個類都繼承於Ext.Base,所以說,圖中所指的全部對象,它既是Ext.Base的子類,又爲Ext.Class的實例。類本身也是一種對象,其類型就是Ext.Classs,故所以對類這個對象我們還可以接着修改之,例如爲MyClass加入Observable功能。

  1. // 這裏我先聲明瞭多態observable,  
  2. Ext.define('MyClass', {  
  3.     mixins: {  
  4.         observable: 'Ext.util.Observable'  
  5.     }  
  6. });  
  7. // 然後,在其他地方,還可以繼續的對MyClass添加新功能  
  8. MyClass.mixin('draggable''Ext.util.Draggable');  

 

可以說,動態類就是這麼生成的了。該技術點在舊版本中難以實現的,現在卻可以輕鬆做到,甚至元數據的編程。


轉自:http://blog.csdn.net/zhangxin09/article/details/619756

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章