配置項config
最後要說明的是“config”配置項對象。配置項對象就是Ext組件的參數,它以對象的key/value形式出現。大多數的配置項可以在運行時作改變。上面的例子中,我們聲明瞭Ext.Windows的“title”配置項,默認值爲“Window Title”。設置類的期間就會有這四個方法給我們: getTitle(),setTitle(),resetTitle()和applyTitle()。
- getTitle – 返回當前標題。
- setTitle – 設置新的標題。
- resetTitle – 恢復標題的默認值(“Window Title”)
- applyTitle – 這是一個你可以定義的模板方法。當執行setTitle時就會執行。
也就說,當改變標題的時候隨之就會執行applyTitle方法。例如我們想更新標題的DOM元素如下。
- Ext.define(‘Ext.Window’, {
- //..如上,
- config: {
- title: 'Window Title'
- },
- // 更新標題其所在的DOM innerHTML。
- applyTitle: function(newTitle) {
- this.titleEl.update(newTitle);
- }
- });
這一切都是自動化的,節省了編碼時間之餘還帶來可維護性的提高。
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)。爲說明清楚,我們創建一個最簡單的類。沒有繼承其他類。
- Ext.define( 'MyClass' , {
- someFunction: function () {
- console.log( 'Ran some function' );
- }
- });
因爲沒有繼承其他類,所以MyClass的基類就是Ext.Base。我們可以透過一個樹狀的關係圖來認識上述的關係。
該樹狀圖由上至下演示了類的整個繼承結構,根對象就是Ext.Base,每一個類都繼承於Ext.Base,所以說,圖中所指的全部對象,它既是Ext.Base的子類,又爲Ext.Class的實例。類本身也是一種對象,其類型就是Ext.Classs,故所以對類這個對象我們還可以接着修改之,例如爲MyClass加入Observable功能。
- // 這裏我先聲明瞭多態observable,
- Ext.define('MyClass', {
- mixins: {
- observable: 'Ext.util.Observable'
- }
- });
- // 然後,在其他地方,還可以繼續的對MyClass添加新功能
- MyClass.mixin('draggable', 'Ext.util.Draggable');
可以說,動態類就是這麼生成的了。該技術點在舊版本中難以實現的,現在卻可以輕鬆做到,甚至元數據的編程。
轉自:http://blog.csdn.net/zhangxin09/article/details/619756