Dojo是一個非常強大的物件導向的JavaScript的工具箱, 建議讀者能夠去補充一下JavaScript下如何使用OO進行編程的, 這對於你以後閱讀Dojo Source有很大的用處。
Getting Started
1: 把Dojo加入到我們的Web程式中
1. 標誌<script type="text/javascript">
djConfig = { isDebug: false };
</script>
djConfig是Dojo裡的一個全域對象, 其作用就是為Dojo提供各種選項, isDebug是最常用的屬性之一, 設定為True以便能夠在頁面上直接看到調試輸出, 當然其中還有些屬性與調試有關, 這裡就不羅索了
2. 引用 dojo 的啟動代碼
<script type="text/javascript" src="/yourpath/dojo.js" />
這樣你就引用了dojo的代碼, 並可以直接使用其中部分常用的對象, 下載下來的dojo.js是壓縮(remove comments and space)後的代碼, 要閱讀的話,建議閱讀dojo.js.uncompressed.js, dojo.js大概有127K, 而未壓縮前有211K, ok, 為什麼會這麼大呢, 原來其已經把部分常用的模組整合進dojo.js裡, 因此顯得大了一點, build.txt裡就說明了預設的dojo.js包含了哪些模組
3. 聲明你所要用到的包
<script type="text/javascript">
dojo.require("dojo.math");
dojo.require("dojo.io.*");
dojo.require("dojo.widget.*");
</script>
你就把這些代碼當成是java的import語句或C#中的using語句一樣, 如果你不require的話, 而模組本身又沒有整合在dojo.js中, 是會出現指令碼錯誤的喔
2. 針對不同需求提供的預整合包
Dojo本身是由許多模組所組合而成的, 但是由於使用者需求的多樣性, dojo針對不同的需求而提供了不同的版本, 使用者在下載dojo的時候就看見可以選擇很多的版本, 比如Ajax版和Widget版, 每個版本最重要的區別就在於dojo.js檔案, 但是除此之外, 每一個版本都是全功能的, dojo.js根據版本的不同而整合進了不同的模組
3. 直接擷取Dojo的最新原始碼
首先你必須安裝 Subversion, 當Subversion在你的電腦上能夠正常工作後,你就可以通過如下命令下載dojo的原始碼:
svn co http://svn.dojotoolkit.org/dojo/trunk/
這會在你的目前的目錄下建立一個 trunk 的目錄; 如果你希望直接Get到目前的目錄, 用這個命令:
svn co http://svn.dojotoolkit.org/dojo/trunk/ .
或者你希望Get到目前的目錄下的 MyDir 目錄, 用這個命令:
svn co http://svn.dojotoolkit.org/dojo/trunk/ MyDir
模組與包
模組
Dojo的代碼被劃分為邏輯單元稱之為模組, 這有點類似於Java中的package,除了dojo的模組能夠包含類 (類似於java中的classes)和簡單函數
比如: 模組"dojo.html"包含了一系列的函數, 比如dojo.html.getContentBox(), 模組"dojo.dnd"包含了一系列的HtmlDragObject的類
注意名稱約定, 函數的首字母為小寫字母,類的首字母為大寫
模組也可以稱之為"命名空間"
包
在多數情況下, dojo的模組只需要定義在一個檔案就可以了, 但有時, 一個模組可能劃分到多個檔案, 比如: 模組dojo.html, 本來是定義在一個檔案中, 可是由於功能的增強, 檔案逐漸層大, 我們不得不將其拆分為多個檔案, 這主要是為效能考慮, 以便瀏覽器可以只下載其需要用到的代碼, 不幸的是其實現細節對於dojo的使用者看起來不那麼透明, 你必須知道你想要用到的功能到底是包含在哪個檔案, 然後才能require並使用它
這樣的每一個檔案都稱之為一個包
dojo.require("dojo.html.extras")
將引用檔案 src/html/extras.js, 這將定義模組 dojo.html 的若干(並非所有)函數
據我所知, 儘管單個檔案可以定義包裡的多個類, 單個指令檔不能定義多個模組 (在Java可以等效於在一個檔案中定義2個類), 並且, 包的名稱和模組的名稱可以不同, 比如: 包dojo.widget.Button定義了dojo.widget.html.Button
基本上你應該這樣認為, 包和模組儘管密切相關, 但是是兩個完全不同的實體
為什麼會有模組和包這樣的概念?
為什麼會有模組和包這樣的概念? 為了滿足你的應用程式只需要載入其所用到的東西的需求, 充分利用模組化設計的優點, dojo維護了最小的足印以便仍能提供你所需要的功能, 為什麼要你的使用者浪費時間去下載用不到的JavaScript, 當一個包就是一個js檔案時, 一個模組本質上就是一個命名空間, 比如: dojo.style 或 dojo.html.extras
多數簡單情況下, 一個包包含了一個模組, 但更常見的是, 一個模組可能被拆分為幾個包檔案
利用包和模組, 將能確保你能夠交付最相關的功能代碼, 最小程度的減少代碼的膨脹和消除由此帶來的不好的使用者體驗,這就是模組設計的主要目標, 通過模組化, 你能夠引入自訂模組(你自己擁有的 JavaScript 工具), 並且維護模組對於核心程式碼程式庫基本不會產生什麼影響
另外, Dojo的模組系統也提供了內建的機制來使用代碼提供命名空間, 比如, 通過模組dojo.event定義的Dojo的事件系統