Ext源碼概覽

入門導向

Ext的新手用戶可以通過下列不同的途徑獲取學習資源:API文檔、維基百科全書、日益豐富的教程、論壇、IRC頻道等等(參閱Learn ),關於這些各個方面在EXT官網上都有。但最重要的可用資源,可以說是Ext源代碼本身。可以這樣方便地學習源代碼(Ext的項目畢竟是開源的),不僅能助你體驗Ext,而且還能讓你接觸到大量的Javascript高級技巧和最佳實踐,進一步提升自身的編碼水平。

揭示源代碼

Javascript是一門解釋型的語言,意味着在運行之前代碼是沒有經過編譯的。按照這種理論,在你網站上所發播的Ext代碼是我們看的懂的(human-readible)。我這裏說“理論上”,是因爲實際情況中,很多源代碼是經過某些自動化步驟的處理,生成很小几行的文件最終發佈的,通過剔除空白符號和註釋,或混淆等的方法,以減小文件大小。

仔細看看EXT標準源碼ext-core.js,你會發現這是一段超長的源碼。這是剛纔提及的自動化步驟生成的結果--對瀏覽器來說不錯!可是對於我們是難以閱讀的。

ext-core.js

 

代碼
  1. /*  
  2.  * Ext JS Library 2  
  3.  * Copyright(c) 2006-2007, Ext JS, LLC.  
  4.  * [email protected]  
  5.  *   
  6.  * http://www.extjs.com/license  
  7.  */  
  8.     
  9. Ext.DomHelper=function(){var _1=null;var _2=/^(?:br|frame...   
  10.     
  11. Ext.Template=function(_1){if(_1 instanceof Array){_1...   
  12. ...  
<script type="text/javascript">render_code();</script>

 

接着看下去的是ext-core-debug.js (注意在文件名後面加上-debug的JS文件), 我會發現是全部已格式化好的源代碼。這個文件是配合調時器所使用的,像Firebug的工具能夠可以讓你一步一步地、一行一行地調試代碼。你也會發現文件的體積將近大了一倍之多,這便是沒有壓縮或混淆的緣故。

ext-core-debug.js

代碼
  1. /*  
  2.  * Ext JS Library 2  
  3.  * Copyright(c) 2006-2007, Ext JS, LLC.  
  4.  * [email protected]  
  5.  *   
  6.  * http://www.extjs.com/license  
  7.  */  
  8.     
  9. Ext.DomHelper = function(){   
  10.     var tempTableEl = null;   
  11.     var emptyTags = /^(?:br|frame|hr|img|input|link|meta|range|spacer|wbr|area|param|col)$/i;   
  12.     var tableRe = /^table|tbody|tr|td$/i;   
  13. ...   
<script type="text/javascript">render_code();</script>
該調試版本可以在調試階段方便地檢查EXT庫運行到哪一步,但是你還是會錯過一個有價值的...代碼註釋!要完整地看到代碼,就要閱讀真正的原始代碼!

 

發佈Ext源碼時的一些細節

你在download得到的壓縮文檔,包含在這些文件夾之中的,有一source的子目錄。在這個文件夾裏面,正如所料,是全部的EXT的源文件,遵從Lesser GNU (LGPL) 開源的協議。對於EXT開發者來說應該非常適合。

用你日常使用文本編輯器打開源代碼的任意一個文件(推薦有高亮顯示的編輯器,或是在這裏full-featured IDE看看),便可以開始我們的探險!

我應該從哪裏開始?

Ext代碼庫裏面包含了許多各種各樣的文件,甚至令人覺得有點望而生畏。好在,Ext是一個通過充分考慮後而設計的JavaScript庫,--在底層的代碼爲各項應用提供穩健的基礎如跨瀏覽器的各種DOM操控,使得在上層的類classes運行於一個較高級的抽象層面(class 一術語與我們已習慣的Java和C++語言稍微有所不同,但一些概念如繼承則可是如此類推去理解的--有關面向對象的JavaScript的更多資料,請參見Introduction to object-oriented (OO) JavaScript)。

這意味着,當瀏覽源碼的時候,採取“自頂向下(bottom-up)”還是“自下向頂(top-down)”的方式,都是無關緊要的。你所熟悉API裏面的代碼已經是屬於最高的抽象層面的範疇,你可以根據你的興趣,順着這些你熟悉的API逐步深入。但是你若認同我的看法,並打算深入瞭解其箇中原理,最理想的地方是從底層代碼開始。

適配器Adapters

瀏覽器讀取第一個源文件,當中的一個任務就是創建Ext對象本身。
Ext.js

 

代碼
  1. Ext = {};  
<script type="text/javascript">render_code();</script>

 

Ext成型於YahooUI的Javascript庫的擴展。在當時,Ext須依賴YUI的底層代碼來處理跨瀏覽器的問題。現在ExtJS已經是獨立、免依賴的庫了(standalone ),你可將YUI替換爲另外你所選擇javascript庫,如prototype、jQuery、或者是這些之中的最佳選擇,-Ext自帶的底層庫。負責將這些庫(包括Ext自帶的底層庫)映射爲Ext底層庫的這部分代碼,我們稱之爲適配器(Adapters)。這部分源碼位於source/adapter的子目錄。當項目引入Ext的時候便需要選擇好你準備使用的適配器。

核心Core

source/core中的文件是構建於適配器API之上的“相對”最底層的源碼。有些的源碼甚至“底層”到直接爲獨立庫的代碼直接使用。這意味着應先了解和學習這整個庫,再學習剩餘的部分也不遲。要了解Ext的各種“Magic”和核心層面,就應該把重點放在source/core 目錄下的各個源代碼。

 
發佈了7 篇原創文章 · 獲贊 1 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章