入門(mén)導(dǎo)向
Ext的新手用戶可以通過(guò)下列不同的途徑獲取學(xué)習(xí)資源:API文檔、維基百科全書(shū)、日益豐富的教程、論壇、IRC頻道等等(參閱Learn ),關(guān)于這些各個(gè)方面在EXT官網(wǎng)上都有。但最重要的可用資源,可以說(shuō)是Ext源代碼本身。可以這樣方便地學(xué)習(xí)源代碼(Ext的項(xiàng)目畢竟是開(kāi)源的),不僅能助你體驗(yàn)Ext,而且還能讓你接觸到大量的Javascript高級(jí)技巧和最佳實(shí)踐,進(jìn)一步提升自身的編碼水平。
揭示源代碼
Javascript是一門(mén)解釋型的語(yǔ)言,意味著在運(yùn)行之前代碼是沒(méi)有經(jīng)過(guò)編譯的。按照這種理論,在你網(wǎng)站上所發(fā)播的Ext代碼是我們看的懂的(human-readible)。我這里說(shuō)“理論上”,是因?yàn)閷?shí)際情況中,很多源代碼是經(jīng)過(guò)某些自動(dòng)化步驟的處理,生成很小幾行的文件最終發(fā)布的,通過(guò)剔除空白符號(hào)和注釋,或混淆等的方法,以減小文件大小。
仔細(xì)看看EXT標(biāo)準(zhǔn)源碼ext-core.js,你會(huì)發(fā)現(xiàn)這是一段超長(zhǎng)的源碼。這是剛才提及的自動(dòng)化步驟生成的結(jié)果--對(duì)瀏覽器來(lái)說(shuō)不錯(cuò)!可是對(duì)于我們是難以閱讀的。
ext-core.js
/* * Ext JS Library 1.1 * Copyright(c) 2006-2007, Ext JS, LLC. * licensing@extjs.com * * http://www.extjs.com/license */ Ext.DomHelper=function(){var _1=null;var _2=/^(?:br|frame... Ext.Template=function(_1){if(_1 instanceof Array){_1... ...
接著看下去的是ext-core-debug.js (注意在文件名后面加上-debug的JS文件), 我會(huì)發(fā)現(xiàn)是全部已格式化好的源代碼。這個(gè)文件是配合調(diào)時(shí)器所使用的,像Firebug的工具能夠可以讓你一步一步地、一行一行地調(diào)試代碼。你也會(huì)發(fā)現(xiàn)文件的體積將近大了一倍之多,這便是沒(méi)有壓縮或混淆的緣故。
ext-core-debug.js
/* * Ext JS Library 1.1 * Copyright(c) 2006-2007, Ext JS, LLC. * licensing@extjs.com * * http://www.extjs.com/license */ Ext.DomHelper = function(){ var tempTableEl = null; var emptyTags = /^(?:br|frame|hr|img|input|link|meta|range|spacer|wbr|area|param|col)$/i; var tableRe = /^table|tbody|tr|td$/i; ...
該調(diào)試版本可以在調(diào)試階段方便地檢查EXT庫(kù)運(yùn)行到哪一步,但是你還是會(huì)錯(cuò)過(guò)一個(gè)有價(jià)值的...代碼注釋!要完整地看到代碼,就要閱讀真正的原始代碼!
發(fā)布Ext源碼時(shí)的一些細(xì)節(jié)
你在download得到的壓縮文檔,包含在這些文件夾之中的,有一source的子目錄。在這個(gè)文件夾里面,正如所料,是全部的EXT的源文件,遵從Lesser GNU (LGPL) 開(kāi)源的協(xié)議。對(duì)于EXT開(kāi)發(fā)者來(lái)說(shuō)應(yīng)該非常適合。
用你日常使用文本編輯器打開(kāi)源代碼的任意一個(gè)文件(推薦有高亮顯示的編輯器,或是在這里full-featured IDE看看),便可以開(kāi)始我們的探險(xiǎn)!
我應(yīng)該從哪里開(kāi)始?
Ext代碼庫(kù)里面包含了許多各種各樣的文件,甚至令人覺(jué)得有點(diǎn)望而生畏。好在,Ext是一個(gè)通過(guò)充分考慮后而設(shè)計(jì)的JavaScript庫(kù),--在底層的代碼為各項(xiàng)應(yīng)用提供穩(wěn)健的基礎(chǔ)如跨瀏覽器的各種DOM操控,使得在上層的類classes運(yùn)行于一個(gè)較高級(jí)的抽象層面(class 一術(shù)語(yǔ)與我們已習(xí)慣的Java和C++語(yǔ)言稍微有所不同,但一些概念如繼承則可是如此類推去理解的--有關(guān)面向?qū)ο蟮腏avaScript的更多資料,請(qǐng)參見(jiàn)Introduction to object-oriented (OO) JavaScript)。
這意味著,當(dāng)瀏覽源碼的時(shí)候,采取“自頂向下(bottom-up)”還是“自下向頂(top-down)”的方式,都是無(wú)關(guān)緊要的。你所熟悉API里面的代碼已經(jīng)是屬于最高的抽象層面的范疇,你可以根據(jù)你的興趣,順著這些你熟悉的API逐步深入。但是你若贊同我的看法,并打算深入了解其個(gè)中原理,最理想的地方是從底層代碼開(kāi)始。
適配器Adapters
瀏覽器讀取第一個(gè)源文件,當(dāng)中的一個(gè)任務(wù)就是創(chuàng)建Ext對(duì)象本身。 Ext.js
Ext = {};
Ext成型于YahooUI的Javascript庫(kù)的擴(kuò)展。在當(dāng)時(shí),Ext須依賴YUI的底層代碼來(lái)處理跨瀏覽器的問(wèn)題。現(xiàn)在ExtJS已經(jīng)是獨(dú)立、免依賴的庫(kù)了(standalone ),你可將YUI替換為另外你所選擇javascript庫(kù),如prototype、jQuery、或者是這些之中的最佳選擇,-Ext自帶的底層庫(kù)。 負(fù)責(zé)將這些庫(kù)(包括Ext自帶的底層庫(kù))映射為Ext底層庫(kù)的這部分代碼,我們稱之為適配器(Adapters)。這部分源碼位于source/adapter的子目錄。當(dāng)項(xiàng)目引入Ext的時(shí)候便需要選擇好你準(zhǔn)備使用的適配器。
核心Core
source/core中的文件是構(gòu)建于適配器API之上的“相對(duì)”最底層的源碼。有些的源碼甚至“底層”到直接為獨(dú)立庫(kù)的代碼直接使用。這意味著應(yīng)先了解和學(xué)習(xí)這整個(gè)庫(kù),再學(xué)習(xí)剩余的部分也不遲。要了解Ext的各種“Magic”和核心層面,就應(yīng)該把重點(diǎn)放在source/core目錄下的各個(gè)源代碼。