http://book.51cto.com/art/200808/86219.htm
javascript
OpenAjax Hub(如下簡稱Hub)主要處理Web應用開發者須要在同一個應用中同時使用多個AJAX運行庫的場景。它提供標準的JavaScript,當被包含在用AJAX技術建立的Web應用中時,讓多個AJAX工具包可以在同一個頁面裏一塊兒協同工做。html
AJAX應用開發者在開發過程當中的需求每每存在着多樣性,這種狀況致使了現在市場上存在超過200個各類各樣的AJAX產品,同時這些產品的架構和特性也存在很大的多樣性。對於一些開發者而言,他們認爲開發中最重要的因素是找到一種能夠提供和後端服務器很好集成的AJAX工具包。
而對於其餘一些開發者而言,最重要的因素則是是否存在可用的特定客戶端組件(例如,富數據網格小部件或者交互式的圖表小部件)。結果,AJAX生態系統發展到如今,開發者在大部分時間裏都能找到知足他們每一個特定需求的AJAX工具包,可是也存在問題,他們每每必須在同一個Web應用中混合和匹配使用由多個AJAX工具包才能知足全部的需求。java
Hub應用的一個重要場景是門戶和mashup,在這些場景中,應用開發者建立一個頁面,頁面裏鬆散裝配預先封裝好的應用組件。Hub其實是保證這些AJAX技術建立的複雜應用可以使用由多個不一樣的AJAX工具包建立的組件進行構建。後端
1 主要特性:Hub的發佈/訂閱管理器瀏覽器
Hub的主要特性是它的發佈/訂閱管理器(如下簡稱爲「pub/sub管理器」)。pub/sub管理器容許mashup的部分功能可以廣播事件到其餘應用組件的訂閱中。例如,假設存在一個日曆小部件,這個小部件容許用戶可以選取一個特定的日期。mashup中可能存在多個用戶界面組件,這些組件都須要根據新選擇的日曆日期來更新它們的可視化外觀。在這種狀況下,日曆小部件將發佈一個「新日曆日期」的事件,而其餘可視化小部件將訂閱這個事件。所以,pub/sub管理器的通用消息的優勢是在由不一樣的AJAX工具包所構建的組件之間提供了一個主要的集成機制。
Hub的pub/sub管理器提供各類各樣的高級特性,例如對事件名稱通配符的強大支持,在下面的例子中咱們沒有展現這個特性。服務器
1.1 示例架構
讓咱們假設如今有這樣一個商業智能應用,該應用使用瞭如下幾種AJAX運行庫:app
UTILS.js,對瀏覽器的JavaScript環境提供很是有用的擴展,例如XMLHttpRequest API。
CALENDAR.js,提供一個日曆小部件。
CHARTS.js,提供一個圖表小部件。
DATAGRID.js,提供一個交互式數據網格小部件。ide
這個應用存在惟一的日曆小部件,用戶能夠以圖表小部件的形式(例如,每日狀態、每週狀態、每個月狀態和每一年狀態的柱狀圖)和數據網格小部件的形式(例如,區域數據和全國數據對比,兩種數據都以用戶選擇的感興趣的列展現)選擇其中的一些數據視圖。函數
當用戶在日曆小部件中選擇了一個新的日期時,用戶指定的各個可視化組件(例如,圖表和/或者數據網格小部件)都須要被更新。
實現這個應用的一種方法是在加載其餘AJAX庫以前加載OpenAjax Hub的JavaScript。例如:
- <html>
- <head>
- ...
- <script type="text/javascript" src="OpenAjax.js"/>
- <script type="text/javascript" src="UTILS.js"/>
- <script type="text/javascript" src="CALENDAR.js"/>
- <script type="text/javascript" src="CHARTS.js"/>
- <script type="text/javascript" src="DATAGRID.js"/>
- ...
- </head>
- ...
一些AJAX運行期包含了OpenAjax Hub,將Hub做爲它們標準發佈的組成部分,在這種狀況下,只要特定的AJAX運行期的JavaScript 在其餘兼容OpenAjax的運行期加載以前被加載,則無需爲OpenAjax.js使用一個單獨的<script>元素。
爲了讓應用正常工做,開發者須要註冊一個回調函數,當用戶在日曆小部件中選擇一個新的日期時,這個回調函數將被調用。這個回調函數接着使用OpenAjax Hub的publish()函數廣播新日期事件:
- <script type="text/javascript">
- ...
- function MyCalendarCallback(...) {
- OpenAjax.hub.publish("myapp.newdate", newdate);
- }
- ...
- </script>
接着開發者須要開發一些代碼,讓全部的圖表小部件和數據網格小部件都訂閱這個新日期事件,而且提供回調函數。各個回調函數將相應地更新特定的可視化小部件:
- <script type="text/javascript">
- ...
- function NewDateCallback(eventname, publisherData,subscriberData) {
- ……更新特定的可視化小件……
- }
- OpenAjax.hub.subscribe("myapp.newdate", NewDateCallback);
- ...
- </script>
1.2 將來支持OpenAjax Hub的工具包
OpenAjax聯盟正在和業內一塊兒合做,以達到普遍支持OpenAjaxHub的目的。某個特定的AJAX工具包能夠像下面這樣支持OpenAjax Hub。
AJAX工具包能夠把Hub包含在內(這是一種最好的方式)。Hub能夠用小於3K的JavaScript實現,因此一些AJAX工具包簡單地捆綁Hub,將它做爲工具包的一個標準組件。
若是Hub在運行環境裏可用,則使用它。其餘一些AJAX工具包可能決定在發佈版本中不包含Hub,它們會檢查Hub是否早先已經被加載了,若是已經加載,那麼它們將直接使用Hub的服務。
第三方的開發者能夠開發適配器。對於大多數工具包而言,它們可能容許第三方的開發者編寫少許的JavaScript,使得本身可以支持Hub。
當AJAX工具包包含對Hub的內置支持時,應用開發者的任務將變得更加容易,可是經過查找或者編寫一個簡單的適配器,Hub仍然能夠與那些還未實現對Hub的支持的工具包一塊兒使用。