顯示具有 dojo 標籤的文章。 顯示所有文章
顯示具有 dojo 標籤的文章。 顯示所有文章

2010-01-17

dojo、dijit 和 dojoX 有什麼不同 ?

dojo 指的是 dojo 的核心程式,所以也叫做 dojo core,就是用 dojo 時一定要有的,而 dijit 是 dojo 的 widget 工具 ( 這裡的 widget 指的是 GUI Widget 而不是網頁在用的 Web Widget ),主要是提供美化過的表單 ( Form ) 元件和圖型元件的功能,而最後的 dojoX 則是提供更進階的圖型處理功能,用來產生統計圖表和提供繪圖的功能。

dojo、dijit 和 dojoX 之間是以 dojo 為基礎,一層一層的疊上去的,所以,如果要用 dijit 或 dojoX 之前,都要先安裝 dojo 才行。

Dojo 如何製作直式選單 ?

Dojo 透過 dijit 的 MenuBar 提供一般常見的橫式選單,不過,dijit.MenuBar 並沒有提供直式 MenuBar 的功能,所以,阿舍就去研究了一下,其實,只要透過 dijit.PopupMenuItem 和 dijit.Menu 的運用就可以做的出來。

阿舍直接以 HTML 的方式來說,要先在最外面將一個 div 的 dojoType 定義為 dijit.Menu,然後裡面再放一個 div 把它的 dojoType 定義為 dijit.PopupMenuItem, 接著再放一個 div,把它的 dojoType 也定義成 dijit.Menu,最後再加上數個 div 當做選單的子項,把它的 dojoType 定義成 dijit.MenuItem,這樣就可以組出直立式的選單了,示意的 HTML 程式碼如下:


   <div dojoType="dijit.Menu">
      <div dojoType="dijit.PopupMenuItem">
         <div dojoType="dijit.Menu">
            <div dojoType="dijit.MenuItem">
               Item11
            </div>
            <div dojoType="dijit.MenuItem">
               Item12
            </div>
         </div>
      </div>
   </div>

2010-01-16

dojo 的 "Could not load cross-domain resources:..." 錯誤與解決方法

阿舍遇到這個錯誤的情形,是在阿舍使用了遠端的 dojo.xd.js 檔案,例如 Google 或 AOL 的 CDN 所提供的 dojo.xd.js 檔,然後又用 dojo.require() 來載入其它模組時,就會發生這個錯誤,會造成這個錯誤的原因是因為用 dojo.require() 載入模組時,Dojo 預設會在參考 dojo.js 或 dojo.dojoxd.js 所引用的路徑來尋找所需的模組,但是,因為是引用遠端的檔案,所以,會造成檔案路徑判斷錯誤而找不到所需的模組檔案。

要解決這個問題的方法不難,只要在引用遠端的 dojo.xd.js 檔案之前,先用 djconfig 把路徑設成 ./ 就可以了,範例如下:

<head>

<link rel="stylesheet" type="text/css" href="http://ajax.googleapis.com/ajax/libs/dojo/1.3/dijit/themes/tundra/tundra.css">

<script type="text/javascript">

djConfig = {
    parseOnLoad: true,
    baseUrl: "./",
};

</script>

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/dojo/1.3/dojo/dojo.xd.js" djConfig="parseOnLoad: true">

</script>

<script type="text/javascript">

dojo.require("dijit.Menu");

</script>

</head>

選擇 Dojo 的理由

阿舍比較了 JQueryPrototype Dojo 三套 Javascript Libray 之後,結果選了 Dojo 來用,阿舍選擇的原因如下 ( 純屬阿舍個人觀點 ):
  • Dojo 的授權是最自由的,而且可以拿來開發商業軟體也可以不用付錢及不用開放原始碼。 
  • Dojo 有針對 Javascript 的語法進行加強,例如像 ForEach 這個功能或是 Map 的功能,原來的 Javascript 是沒有提供的,但是 dojo 提供了 dojo.ForEach 和 dojo.map 的功能。 
  • Dojo 的語比較接原來的 Javascript 語法,雖然 JQuery 的 $() 很好用,但是,阿舍還是覺得程式不好看,不好維護。 
  • Dojo 目前已被應用在 IBM 的產品裡且受到 IBM 的支持。 
有興趣的話可以到這裡看看它的功能展示。

2009-12-19

安裝 Dojo、Dijit 及 DojoX

Dojo、Dijit及 DojoX 不用特別執行什麼安裝程式,只要下載並解壓就可以了,不過,要注意的是,解開後的 Dojo、Dijit及 DojoX 三個資料夾要放在同一個資料夾裡才行,例如,阿舍在 Apache 的 htdocs 裡建了一個資料夾叫做 js ,那麼就要把 Dojo、Dijit及 DojoX 這三個資料夾都放到 js 裡才行,不然,當使用 dojo.require() 來取 dojo 的模組時,就會發生找不到檔案的問題哩 !!

Lotus Domino 8.5 內建 Dojo 1.1.1 版

Lotus Domino 8.5 在出廠的時候就已經內建有 Dojo 1.1.1 的版本,用來增強 Lotus Domino 在 Web 上的 Ajax 功能,,同時也讓本來不是 Lotus Domino/Notes 的開發者能較容易的進入 Lotus Domino 的 Web 程式開發領域,另外 dojo 也整合在 Lotus Domino 8.5 的 XPage 新功能裡。

內建的 Dojo 被放在 Lotus Domino Server 上的 data\domino\js\dojo-x.x.x\dojo\dojo.js 裡,在 Web 上的 URL 是  /domjs/dojo-x.x.x/dojo/dojo.js,這和傳統 Lotus Domino Server 上的網址轉換是不太一樣的。
Lotus Domino 8.5 Server 有針對 Dojo 進行最佳化和提供 GZip 壓縮的功能,同時也支援瀏覽器預載快取 ( Predictable Browser Caching )的功能,提高 Dojo 的執行效能和降低頻寛的使用...。

註 : 那 Lotus Domino 6.5 和 7.0 的用戶是不是現在就可以考慮使用 Dojo 來開發 Web 程式哩 !? 之後升就會比較簡單哩 !! 

Notes Domino 6.x火速上手



2009-12-16

dojo.byId 和 dojo.query 的差別..

dojo.byId 只能用來取有 ID 的節點,傳回值是一個 DomNode,可以直接對它做操作,而 dojo.query 可以支援 CC3 Selector 的方式選取 HTML 或 XML 文件中的多個節點,所以 dojo.query 的傳回值是一個 dojo.NodeList,也就說 dojo.query 的傳回值不能直接拿來操作 ( 例如用 innerHTML 塞字串 ),而是必須透過 dojo.forEach 來處理。

一般來說,dojo.byId 適合用來處理有 ID 的節點,而 dojo.query 適合用來處理 Class 節點或複雜的節點搜尋。

2009-12-14

dojo.indexOf 說明與範例

dojo.indexOf 是 dojo 的陣列處理函數之一,用來取得指定字串在陣列中第一次出現的位置,如果找不到指定的字串時,會傳回 -1 表示,用法如下:
var 字串位置 = dojo.indexOf(陣列名稱, "搜尋字串");
程式範例如下:
<script type="text/javascript">
   dojo.addOnLoad(function(){
    var arrSample = ["apple", "dog", "book","book","desk"];
    var position = dojo.indexOf(arrSample, "book");
        alert(position);
    });
</script

dojo 辨識瀏覽器名稱和版本

dojo 判斷瀏覽器的方式是透過下面這一堆的函數來判別瀏覽器的種類,而不是單純的呼叫一個函數就可以了,所以,有一點小小的麻煩。
  • dojo.isIE
  • dojo.isMozilla
  • dojo.isFF
  • dojo.isOpera
  • dojo.isSafari
  • dojo.isKhtml
  • dojo.isWebKit
  • dojo.isChrome
上面的這些函數在找到正確的瀏覽器名稱後會回傳瀏覽器的版本,所以,如果有傳回值就表示找到正確的瀏覽器名稱了,程式範例如下:
<script type="text/javascript">
dojo.addOnLoad(function(){
  dojo.forEach(["IE", "Mozilla", "FF", "Opera", "WebKit", "Chrome","Khtml","Safari"],
               function(browserName) {
                    if (dojo["is"+browserName]) {
                        var version = dojo["is"+browserName] ;
                        dojo.byId("msg").innerHTML = browserName + " " + version;
                    }
               });
  });
</script>
   
<body>
<div id="msg"></div>
</body>

2009-12-13

dojo : djConfig 的用法

djConfig 是用來改變 dojo 預設的全域變數,一般的情況下是不會用到的,只有在要啟用 Debug ( 偵錯 ) 模式或是多國語言時才會用到,使用方式有二種,第一種是直接把 djConfig 當作是 HTML 的標籤 ( Tag ) 屬性 ( Attribute ),把它放到 Script 標籤裡,方法如下:

<script

type="text/javascript"

src="http://ajax.googleapis.com/ajax/libs/dojo/1.4.0/dojo/dojo.xd.js"

djConfig="parseOnLoad: true, isDebug: true">

</script>

第二種則是透過 Javascript 程式碼先設定好 djConfig 物件,而不使用標籤屬性的方法,寫法如下:

<script type="text/javascript">

var djConfig = {

parseOnLoad: true,

isDebug: true,

};

</script>

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/dojo/1.4.0/dojo/dojo.xd.js"></scrip

那一種比較好,阿舍個人是覺得,當 djConfig 要用到的參數少時,就用第一種,djConfig 參數多時就用第二種,如果要動態指定 djConfig 參數時,那當然也是用第二種囉 !!