正在翻譯《Enterprise AJAX》,附錄里介紹到OPENAJAX HUB,google相應的中文資料很少,所以就把譯文貼出來:)
OpenAjax Hub(“Hub”)主要用來處理Web應用開發者需要在同一個應用中同時使用多個AJAX運行庫的情況。它提供標準的JavaScript,當被包含在AJAX驅動的Web應用里時,它使得多個AJAX工具包能夠在同一個頁面里一起協同工作。
AJAX應用開發者在開發中的需求往往存在著巨大的差異,這導致了如今市場上存在超過200個各種各樣的AJAX產品,同時這些產品的架構和特性也存在巨大的差異。對一些開發者來說,他們認為開發中最重要的因素是找到一個能提供與后端服務器強大集成能力的AJAX工具包。
而對其他一些開發者來說,最重要的因素則是能否應用特殊的客戶端組件(例如,富數據網格組件或交互式的圖表組件)。結果,AJAX生態系統發展到現在,開發者在大部分時間里都能找到滿足他們每個特殊需求的AJAX工具包,但是也存在問題,他們往往必須在同一個Web應用里混合和匹配使用多個AJAX工具包才能滿足所有的需求。
Hub應用的一個重要場合是門戶和內容糅合,這里,應用開發者創建一個頁面,頁面里松散組裝預先包裝好的應用組件。Hub實際上是保證這些AJAX驅動的應用組件能夠使用多個不同的AJAX工具包創建。
主要特性:Hub 的發布/訂閱管理器
Hub的主要特性是它的發布/訂閱管理器(“pub/sub管理器”)。 pub/sub管理器允許內容糅合的一個部分能夠傳播其他應用組件所訂閱的事件。例如,假設存在一個日歷組件,該組件允許用戶能夠選取一個特定的日期。內容糅合里可能存在多個UI組件,這些組件都需要根據新選擇的日歷日期而更新它們的視覺外觀。在這種情況下,日歷組件將發布一個“新日歷日期”的事件,而其他可視化組件將訂閱這個事件。因此,pub/sub管理器的通用消息的優點是給由不同AJAX工具包所構建的組件之間提供了一個關鍵的集成機制。
Hub的pub/sub管理器提供各種各樣的先進特性,例如對事件名稱通配符的強大支持,在下面的例子里并沒有展示這個特性。
范例
讓我們假設現在有這樣一個商務智能應用,該應用使用下面的AJAX運行庫:
■ UTILS.js, 對瀏覽器的JavaScript環境提供非常有用的擴展,例如XMLHttpRequest的APIs。
■ CALENDAR.js,提供一個日歷組件
■ CHARTS.js, 提供一個圖表組件
■
DATAGRID.js,提供一個交互式的數據網格組件
該應用有一個唯一的日歷組件,用戶可以以圖表組件的形式(例如,每日情形、每周情形、每月情形和每年情形的柱狀圖)和數據網格組件的形式(例如,地方數據與全國數據,兩種數據都以用戶選擇的感興趣的列展示)選擇其中的一些數據視圖當一個新的日期在日歷組件里被選擇時,各個用戶指定的可視化組件(例如,圖表和/或數據網格組件)都需要被更新。
實現該應用的一個方法是在加載其他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(譯注:這里特定的JavaScript指的就是包含OpenAjax Hub的AJAX運行庫的代碼)在其他兼容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>
未來支持OpenAjax
Hub的工具包
OpenAjax聯盟正與工業界一起合作,達到對OpenAjax Hub的廣泛支持。一個特殊的AJAX工具包可以像下面這樣支持OpenAjax Hub:
■ AJAX工具包可以包含Hub(最好的方式)。Hub可以被小于3K的JavaScript實現,所以一些AJAX工具包簡單地捆綁Hub,將它作為它們工具包的一個標準組件。
■ 如果Hub在運行環境里可用則使用它。其他一些AJAX工具包可能決定在它們的發布中并不包含Hub,它們會檢查Hub是否早先已經被加載了,如果已經加載,它們則直接使用Hub的服務。
■第三方的開發者可以開發適配器。對大多數工具包來說,它們可能允許第三方的開發者編寫少量的JavaScript使得自己能夠支持Hub。
當AJAX工具包包含內置對Hub的支持時,應用開發者的工作將更加容易,但是通過查找或編寫適配器的方式,Hub依然可以被那些并未實現支持Hub的工具包所使用。
http://www.tkk7.com/ronghao 榮浩原創,轉載請注明出處:)
posted on 2008-01-01 12:57
ronghao 閱讀(2467)
評論(4) 編輯 收藏 所屬分類:
ajax相關