使用Dojo的Ajax應用開發進階教程,第8部分: Dijit開發最佳實務

來源:互聯網
上載者:User

Dijit 組件(widget)是 Dojo 提供的圖形化使用者介面組件庫。它提供了 Ajax 應用開發中會用到的常用組件,可以協助開發人員快速的構建 Ajax 應用。本文並不會介紹 Dojo 預設提供的組件,而是側重於介紹 Dijit 組件的編程模型和最佳實務,其目的是協助開發人員更好的開發自己的 Dijit 組件。下面首先對 Dijit 做概要介紹。

Dijit 概述

Dijit 組件的存在是 Dojo 架構區別於其它 JavaScript 架構的一個重要特性。在案頭應用開發中,開發人員大量使用圖形化使用者介面組件庫來提高開發效率。而在 Web 應用程式開發中,HTML 語言本身僅提供了少數基本的控制項,如按鈕、單選框、複選框、文本輸入框和下拉式清單等。而對於在 Web 應用程式開發中常見的一些複雜組件,如對話方塊、菜單、工具列、進度條、富文字編輯器和樹等,並沒有提供原生的支援。在這種情況下,開發人員往往需要自己開發這樣的複雜組件,這就造成了更長的開發週期和更高的開發和維護的成本。

Dojo 提供了一個種類多樣的組件庫。開發人員只需要簡單的定製就可以在自己的應用中使用這些組件。除此之外,Dojo 還提供了完善的組件編程模型。如果預設提供的組件都不能滿足需求,可以自己來開發所需的組件。遵循這個統一的編程模型,會比從頭開始建立組件要容易得多。有了組件的概念之後,開發人員在設計 Web 應用程式的時候,就可以從比較高的抽象層次來對應用的各個部分進行劃分。定義好清晰的組件介面之後,團隊成員就可以各司其職,並行開發,從而提高開發效率。

在開發 Dijit 組件的時候,需要注意下面幾個基本的問題。

組件的粒度問題。一般來說,功能比較複雜的組件不利於複用,也不利於團隊開發時的分工合作。但是過多小工具在頁面上的時候,會消耗比較多的系統資源,影響效能。而效能對 Web 應用程式來說是一個非常重要的因素。因此需要進行一定的權衡。比較好的做法是從較大的組件開始,當發現存在代碼重複的時候,再把重複的代碼提取出來,重構成新的組件。這樣就把劃分成小工具的決策延遲到了真正需要的時候,避免過度設計。

組件的介面問題。組件的介面定義了代碼中的其它部分如何使用該組件。一般來說,組件可以提供三類的介面:公用屬性、公用方法和事件綁定點。公用屬性指的是組件提供的可以公開訪問的單一資料型別屬性。一般在建立組件的時候使用,用來對組件進行定製;公用方法指的是可以公開訪問的 JavaScript 方法。一般在組件建立完成之後使用,用來改變組件的行為;事件綁定點是組件暴露出來的佔位方法。一般由組件使用者通過 dojo.connect()來綁定到該方法上。組件使用該方法來通知使用者其內部狀態的變化。這類方法一般以 on作為名稱首碼。開發人員應該根據需要定義合適的介面,避免一些不好的實踐。比如公用屬性的值在組件建立之後,一般不推薦使用者設定其值。如果設定該屬性的值是一個合理的情境的話,最好提供相應的公用方法,並以文檔的形式告訴使用者正確的用法。

組件之間的互動問題。組件之間如果需要相互連訊的話,最好使用組件的對象引用來完成。比如某個組件在建立另外一個組件的時候,可以把自己的對象引用作為參數傳遞給其建立出來的組件。後者就可以使用此對象引用來調用前者的方法。另外一種做法是通過 dojo.publish()和 dojo.subscribe()方法來完成。這種做法的使用比較簡單,可以避免層次較深的對象引用傳遞。不好的地方是組件之間的關聯關係不夠清晰,也比較難維護。推薦的做法是優先使用第一種方式。

上面對開發 Dijit 組件的一些通用問題進行了討論。下面開始介紹 Dijit 組件的編程模型。在編程模型的介紹過程中,會穿插介紹相關的最佳實務。首先從 Dijit 組件的核心類 dijit._Widget開始。

dijit._Widget

dijit._Widget是所有 Dijit 組件的父類。Dijit 預設提供的組件以及自己開發的組件都需要繼承自此類。dijit._Widget所提供的方法涉及組件的生命週期、屬性設定和擷取、事件處理和其它協助工具功能等。深入瞭解該類的這些方法的用法和實現細節,是開發自己的 Dijit 組件的基礎。下面分別對 dijit._Widget提供的方法進行分類討論。

組件生命週期

dijit._Widget提供了對組件生命週期的完整管理,包括組件的建立和銷毀。Dijit 組件的生命週期管理在實現的時候,使用了模板方法(Template Method)設計模式。dijit._Widget類的 create()方法定義了 Dijit 組件建立時的生命週期的預設範本。該方法會在合適的時機調用模板中包含的其它方法。這些不同的方法構成了組件生命週期中的各個階段。開發自己的組件的時候,可以覆寫其中的某些方法,從而在感興趣的階段添加自己的處理邏輯。開發人員也可以覆寫 create()方法來提供一套完全不同的生命週期實現。不過這種做法風險太大,不建議使用。絕大多數情況下,覆寫預設範本提供的方法就足夠了。dijit._Widget中定義的組件生命週期中的建立階段如 圖 1 所示。

圖 1. Dijit 組件建立過程

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.