Dojo

Dojo

開源DHTML工具包
Dojo是一個用javascript語言實現的開源DHTML工具包。它是在幾個項目捐助基礎上建立起來的(nWidgets,Burstlib,f(m[1])),這也是為什麼叫它a“unified”toolkit的原因。Dojo的目标是解決開發DHTML應用程序遇到的那些長期存在、曆史問題(historical problems with DHTML)、跨浏覽器問題。
  • 中文名:豆粥
  • 外文名:Dojo
  • 地理位置:
  • 所處時代:
  • 占地面積:
  • 保護級别:
  • 開放時間:
  • 屬性:開源DHTML工具包
  • 語言:javascript
  • 目的:解決跨浏覽器問題

原意

A school for training in Japanese arts of self-defense。 such as judo(柔道) and karate(空手道)、

柔道訓練學校,柔道館,道館。

發音:“豆粥”

快速安裝

在DOjo官方網站下載相應版本的DOJO壓縮包

把文件解壓縮到你的服務器或測試目錄。這裡假設把文件解壓到 、js 下面,當做完以上步驟後,會出現如下圖的目錄結構。

在HTML頁面上添加JS引用,如:

至此,安裝完成,DOJO的詳細使用方法,請參考DOJO官方文檔。

曆史

在2004年初, Alex Russell (netWindows的原作者)開始在Informatica公司内尋找一個在DHTML項目的一個合作者。這個過程中,許多DHTML社區的成員都被他聯系到了。這些溝通最終引出了一封題為“宣傳DHTML的未來”的郵件。David Schotzler, Dylan Schiemann也與同年加入了Informatica公司。所以Dojo的最初的代碼是有Alex和Dylan在Informatica的支持下寫的。在Dojo早期,有許多成員都積極參與了開發,并逐漸形成了dojo今天的方向,他們是Joyce Park。 Tom Trenka。 Mark Anderson。 Leonard Lin (最初提議用Dojo這個名字的人)。 Aaron Boodman。 Simon Willison。 Cal Henderson。 and Dan Pupius、

社區成員們最初幾個月在ng-html郵件列表上讨論了關于授權協議,項目名稱,編碼規範,構建工具,服務器配置和用戶需求之後,真正的工作開始了,dojo基金會也宣告成立。基金會是一個501實體,用來保管項目代碼和知識産權,今天基金會也資助其他一些項目。dojo的貢獻者來自超過60個開發者,許多的公司,主要的用戶包括IBM。AOL。 Sun。 SitePen。 Bloglines。 Google。 Nexaweb。

版本

目前的最新版本:1、10

Dojo 1、5、0 于2010 年7月15日正式發布。此次發布的1、5、0版是dojo的第11個主要版本。此次發布包括了許多更新,具體包括:

新的用戶界面

新版本的Dojo 提供了許多重大的界面改進,使用了新的Claro 主題。Claro 主題為Dojo 的用戶界面庫Dijit提供了現代,專業的界面風格。 這一主題包含了許多漸變透明背景,陰影以及CSS 動畫特效(在WebKit 和基于Mozilla 的浏覽器中可用)

新的主題體現了“簡單好用”的設計原則,并且極大的簡化了了用戶自己定制主題CSS的難度。因此用戶可以很容易的創建出屬于自己的風格,比如留白和色彩,而不用去設計新的背景圖片。與此同時,這些新的風格都被應用到了不斷增長的UI控件之中。

新版的Dojo 還提供了門戶網站布局機制,例如 “personalized Orange home page ”。用戶可以快速創建自定義的應用界面。新版的Dojo 中還對矢量圖形,圖表控件 和繪圖控件 做了許多增強, 包括 新的主題,漸變填充 等。新的dojox、gfx (圖形圖象包)在現有的支持SVG ,VML ,Canvas ,Flash 和Silverlight 之外增加了針對SVGWeb 的支持。因此你的圖形代碼可以根據浏覽器而自動選擇合适的底層引擎獲得最大效率,同時也可以最大限度的保證浏覽器兼容性。

穩定,兼容的Dojo 核心

Dojo core( 核心庫) 一直非常穩定,因此從以前版本的Dojo 升級會非常順利,同時新版的Dojo core 也做了許多改進。 新增加了dojo、Stateful API 。 改進了dojo、Deffered API ,新增加了一種基于“承諾機制” api 。

簡而言之,Dojo core 核心庫提供了你構建Web 應用必須的幾乎所有基礎功能。

HTML5 & CSS3

Dojo 中支持許多HTML5 的特性,其中有些特性的加入甚至早于任何浏覽器對它們的支持,例如本地存儲。針對HTML5 的新功能,Dojo的策略是盡可能的包裝浏覽器的功能,修正浏覽器功能的小錯誤,增加API 的功能,簡化用法,并且對舊版本的浏覽器提供一種兼容的方案。其他功能的增強還包括,所有基于文本框的控件都增加了占位提示文本,新的dojox、style 擴展 用于支持CSS 轉換,本地存儲,富文本編輯器 ,多文件的上傳,圖形API 對Canvas 和SVG 的支持。

Dojo 移動

移動應用開發領域的發展飛速,其變化演進的速度遠遠超出了我們對Dojo 核心保持穩定的承諾。因此在Dojo中有許多新的計劃正在積極進行中,目标是解決開發移動應用的時的各種難題。我們希望能夠同時解決兩種移動應用的類型:一種是移動的Web應用(運行在浏覽器中),另一種是本地安裝的移動應用,但其中嵌入浏覽器。下面一系列的新計劃或項目正在開展中,有些屬于Dojo工具包,有些則屬于Dojo 基金會:

dojox、mobile : 輕量級的移動應用組件

dojox、mobile、app : 移動應用開發框架

embedjs : 為移動應用優化的Dojo API

TouchScroll : 為WebKit 移動版定制的滑動抽象層

wink : 移動應用程序工具包 (wink 是一個新加入dojo 基金會的項目)

浏覽器支持

Dojo 支持幾乎所有現代的浏覽器,官方正式支持并經過測試的浏覽器包括: Chrome 5。 Firefox 3、5 and 3、6、Internet Explorer 6。 7。 and 8、 Opera 10、6 (Dojo Core only)、 safari 4、1and 5、 其他的浏覽器版本雖然未經官方正式聲明支持,在絕大多數情況下Dojo 也可以在上面運行的很好。

性能和穩定性

Dojo 始終是性能評價最好的幾個Ajax 工具包之列,我們還提供了工具來幫助你擴展的應用程序去提升性能。不管你使用哪種開發工具包都有可能碰到性能問題,而Dojo 的社區的存在以及Dojo 背後的許多的廠商都會幫助你診斷和解決你所遇到性能問題。

整合與集成

無論你曾使用過哪種HTTP 兼容的服務器端環境: Zend Framework。 Spring。 Persevere。 Node。Narwhal。 cometD-Jetty。 DWR。 Compuware Uniface。 Ruby on Rails。 Django。WebSphere。 Apache。 IIS。 Dojo 都很容易與這些框架或技術進行集成。

Dojo 也提供了與Adobe AIR 1、5、 2、0 , Appcelerator Titanium。 PhoneGap 的集成,并且提供了與各種開發環境的集成接口包括: aptana studio。 Komodo。 Elicpse 等等。

文檔與技術支持

Dojo 官方站點有完整的文檔,而活躍的社區論壇為用戶提供技術支持。如果需要職業的支持與咨詢,Sitpen 是一家會為你提供Dojo 技術服務與咨詢的公司。

現在開始下載并試用Dojo1、5 吧,告訴我們你的感受,也告訴我們你用Dojo 構建了哪些了不起的應用!

Dojo 基金會

Dojo 工具包是Dojo 基金會的一部分。在Dojo 工具包之外,基金會迎來了3 個新項目的加入 Zazl 。 AnimeJ 。 和wink 、 基金會的其他項目cometD-Jetty 發布了2、0 版本,而 Persevere 2、0 beta 版将于2010年夏發布。

------------舊版信息----------

請大家下載dojo 0、3、1。 以下的說明均針對此版本

1: 把Dojo加入到我們的Web程序中

1、1 标志

djConfig是Dojo裡的一個全局對象。 其作用就是為Dojo提供各種選項。 isDebug是最常用的屬性之一。 設置為True以便能夠在頁面上直接看到調試輸出。 當然其中還有些屬性與調試有關。 這裡就不啰嗦了

1、2 引用 dojo 的啟動代碼

你就把這些代碼當成是java的import語句或C#中的using語句一樣。 如果你不require的話。 而模塊本身又沒有整合在dojo、js中。 是會出現腳本錯誤的喔

2、 針對不同需求提供的預整合包

Dojo本身是由許多模塊所組合而成的。 但是由于用戶需求的多樣性。 dojo針對不同的需求而提供了不同的版本。 用戶在下載dojo的時候就看見可以選擇很多的版本。 比如Ajax版和Widget版。 每個版本最重要的區别就在于dojo、js文件。 但是除此之外。 每一個版本都是全功能的。 dojo、js根據版本的不同而整合進了不同的模塊

3、 直接獲取Dojo的最新源代碼

、、、、、、

作用

Dojo讓你更容易使web頁面具有動态能力,或在任何穩健的支持javascript語言的環境中發揮作用。

a、利用dojo提供的組件,你可以提升你的web應用程序可用性、交互能力以及功能上的提高;

b、你也可以更容易的建立degradeableuserinterfaces??,dojo提供小巧的widgets,animatetransitions;

c、利用它的低級APIs和可兼容的代碼,寫出輕便的、單一風格(複雜)的javascript代碼,Dojo的eventsystem。I、OAPIs。and generic language enhancement form the basis of a powerful programming environment、

d、通過Dojo提供的工具,你可以為你的代碼寫命令行式的單元測試代碼。

e、the Dojo package system使你自己的代碼更容易維護,耦合性更低。

Dojo通過很少的代碼完成了以上的功能。(以後可能我詳細說說dojo的packagesystem,隻需要三個js文件)。當你寫腳本時,隻需要包含很少的js文件(大小)。也可以選擇的(包含)下載dojo提供的龐大的功能。Dojo provides Multiple Points Of Entry。Interpreter Independence。Forward Looking APIs。and focuses on Reducing Barriers To Adoption、

dojo試圖建立一種新的标簽語言DojoML。目标是,在DojoML和javascript腳本語言不變的情況下,用不同的render方式展示數據,Renderingsmaybemadeavailableinseveralrenderingcontexts(suchasSVG。orperhapseventhedesktoporFlash)。(比較美好啊)更進一步,theDojoML剖析器可以接受html和svg為輸入,容易的建立DegradeableResponsiveApplications

選擇理由

1、dojo是一個很好的基礎架構。

它可以非常有效地分離頁面中的Structure、Presentation、Behaviour,這對于實現Ajax組件unobtrusive的目标非常有幫助。

有人問:那麼,同樣是基礎架構,你為什麼不選擇Prototype呢?

當然,Prototype對于開發一些Ajax效果也是非常有幫助的。但是Prototype的設計目标和dojo有很大的不同。

Prototype的設計目标是擴充JavaScript的功能,使得可以以類似于Ruby的方式來編寫JavaScript。Prototype主要是對于JavaScript語言本身的一些底層的擴充,另外解決了一些跨浏覽器的問題。但是Prototype還是太底層了,本身提供的功能非常少,基于它來建造複雜的Ajax組件(例如,一個功能完善的Grid組件)仍然非常困難。

而Rico呢,仍然談不上是一個框架,Rico和scriptaculous都隻是基于Prototype建造的Ajax效果庫。Rico的LiveGrid太原始了,這也是我放棄Rico的一個原因,而且Rico這半年來就沒有什麼大的發展。

我并不是要否定Prototype,而是經過考察發現Prototype很難支持我的目标。我的目标就是建造一個全面的Ajax組件庫,dojo恰好對于支持這個目标非常有幫助。

dojo其實是一個組件模型,類似于Spring,用來支持大規模的組件化開發。組件模型的作用就是增強代碼的重用,這對于提高開發效率是至關重要的。

2、dojo的背後有強大的支持。

dojo現在已經是衆多開源框架的選擇,包括:

*WebWork

*tapestry

*EclipseATF

*myfaces

這個列表還會随着時間的推移而擴大。

dojo的開發團隊由AlexRussell領軍,人數衆多,力量非常強大。

對象方法

這裡所說的基礎對象和方法是指的不Require任何包就能夠調用的對象和方法

匿名函數

在開始前,介紹一下js裡的匿名函數,這個在閱讀dojo的源代碼的時候,會發現到處都有匿名函數

、(function(){

alert(123)、

})()、

、、前面的分号是一個空語句,是可以不要的匿名函數。一個匿名函數就是一個沒有名字的函數。可以認為他們是一次性函數。當你隻需要用一次某個函數時,他們就特别有用。通過使用匿名函數,沒有必要把函數一直放在内存中,所以使用匿名函數更加有效率。當然你也可以根本不定義函數,但是使用匿名函數可以把你的代碼分段,就像C#中的#region一樣

dojo、byId

非常有用的一個方法,與prototype、js的著名的$一樣,似乎以前的版本還有dojo、byIdArray。不過最新的版本已經找不到這個函數了(除了srccompat、2、2、js)。

如果有多個元素具有指定的id,則返回的是一個集合

UsageExample:

dojo、byId("divTest")、

dojo、byId("divTest"。document)、

dojo、byId(document、getElementById("divTest"))、

dojo、version

dojo的版本,可以取得major。minor。patch。flag和revision

這個對象沒什麼太大用處,除非你要根據dojo的版本選擇執行你的代碼

dojo、raise

?抛出一個異常

dojo、errorToString

?将異常轉換為字符串

?UsageExample:

try

{

dojo、raise("打印失敗"。newError("文件不存在"))、

}

catch(e)

{

alert(dojo、errorToString(e))、

}

dojo、render

?系統環境對象

dojo、rendere返回browser,說明是工作在浏覽器下

dojo、render、ver返回4,似乎沒什麼用

dojo、os、win返回true說明操作系統是Windows

dojo、os、linux返回true說明操作系統是Linux

dojo、os、osx返回true說明操作系統是MacOS

dojo、html返回true說明浏覽器是InternetExplorer

dojo、html、opera返回true說明浏覽器是Opera

dojo、html、khtml返回true說明浏覽器是Konqueror

dojo、html、safari返回true說明浏覽器是Safari

dojo、html、moz返回true說明浏覽器是MozillaFireFox

dojo、svg、capable返回true說明浏覽器支持svg

dojo、vml、capable返回true說明浏覽器支持vml

dojo、swf、capable返回true說明浏覽器支持swf

dojo、swt、capable返回true說明浏覽器支持swt(IBM開發的StandardWidgetToolkit)

如果dojo、html為true的話

dojo、html50返回true說明浏覽器是IE5、0

dojo、html、55返回true說明浏覽器是IE5、5

dojo、html、60返回true說明浏覽器是IE6、0

dojo、html、e70返回true說明浏覽器是IE7、0

dojo、addOnLoad

可以加載指定函數到window、load時執行,好處就是可以很方便的在window、load時執行多個函數

UsageExample:

dojo、addOnLoad(init)、、、init是一個函數

dojo、addOnLoad(myObject。init)、、、init是myObject對象的一個方法

dojo、require

如果你想調用一個模塊的對象的時候,你應該首先用dojo、require來請求這個模塊,dojo會根據你的請求自動取得相應的js文件,并加載到内存中,這樣你才能調用或創建其中的對象

dojo會自動維護已加載的模塊列表,所以是不會重複加載模塊的

UsageExample:

dojo、require("dojo、event")、

dojo、requireIf=dojo、requireAfterIf

可以根據指定的條件來決定是否加載指定的模塊

UsageExample:

dojo、requireIf(dojo、htmle。"dojo、html")、、、如果dojo、html、為true,才會加載dojo、html模塊

dojo、provide

除非你要開發自己的模塊,不然是用不到這個方法的,你可以這句看成是向系統注冊這個模塊名稱。

UsageExample:

dojo、provide("dojo、custom")、

dojo、exists

判斷指定對象是否具有指定名稱的方法

UsageExample:

dojo、exists(dojo。"exists")、、、willreturntrue

dojo、hostenv、getText

返回指定url的内容

PS:由于浏覽器的安全限制,因此隻能用于取得同域名的url的内容,否則會報告權限不夠

UsageExample:

aSync=false、、、同步,确保返回内容不為null

silent=true、、、不抛出錯誤

s=dojo、hostenv、getText("http:、、www、googcom、"。aSync。silent)、、、返回Google的首頁的HTML

alert(s)、

dojo、debug

輸出調試信息,如果在djConfig中指定了debugContainerId,則輸出到指定的console容器中,否則直接document、write。

所有的調試信息均以DEBUG:開頭

UsageExample:

dojo、debug("這是調試信息")、

dojo、hostenv、println

與dojo、debug類似,不同的是,輸出内容沒有DEBUG:

UsageExample:

dojo、hostenv、println("這是一般的輸出信息")、

dojo、debugShallow

輸出指定對象的全部信息(Shallow說明并不會遍曆到下一級别的對象屬性)以供調試

UsageExample:

dojo、debugShallow(dojo、render、html)、

相關詞條

相關搜索

其它詞條