posts - 193,  comments - 520,  trackbacks - 0
正在翻译《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工具包所构建的组件之间提供了一个关键的集成机制。

Hubpub/sub管理器提供各种各样的先进特性,例如对事件名称通配符的强大支持,在下面的例子里并没有展示这个特性。

范例

让我们假设现在有这样一个商务智能应用,该应用使用下面的AJAX运行库:

UTILS.js, 对浏览器的JavaScript环境提供非常有用的扩展,例如XMLHttpRequestAPIs

CALENDAR.js,提供一个日历组件

CHARTS.js, 提供一个图表组件

     DATAGRID.js,提供一个交互式的数据网格组件

该应用有一个唯一的日历组件,用户可以以图表组件的形式(例如,每日情形、每周情形、每月情形和每年情形的柱状图)和数据网格组件的形式(例如,地方数据与全国数据,两种数据都以用户选择的感兴趣的列展示)选择其中的一些数据视图当一个新的日期在日历组件里被选择时,各个用户指定的可视化组件(例如,图表和/或数据网格组件)都需要被更新。

实现该应用的一个方法是在加载其他AJAX库之前加载OpenAjax HubJavaScript。例如:

<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 HubAJAX运行库的代码)在其他兼容OpenAjax的运行库之前被加载,那么则没有必要为OpenAjax.js使用一个单独的<script>元素。

要使应用工作,开发者需要注册一个回调函数,当用户在日历组件里选择一个新的日期时调用该函数。这个回调函数接着使用OpenAjax Hubpublish()函数传播这个新日期事件:

<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可以被小于3KJavaScript实现,所以一些AJAX工具包简单地捆绑Hub,将它作为它们工具包的一个标准组件。

如果Hub在运行环境里可用则使用它。其他一些AJAX工具包可能决定在它们的发布中并不包含Hub,它们会检查Hub是否早先已经被加载了,如果已经加载,它们则直接使用Hub的服务。 

第三方的开发者可以开发适配器。对大多数工具包来说,它们可能允许第三方的开发者编写少量的JavaScript使得自己能够支持Hub

AJAX工具包包含内置对Hub的支持时,应用开发者的工作将更加容易,但是通过查找或编写适配器的方式,Hub依然可以被那些并未实现支持Hub的工具包所使用。





http://www.blogjava.net/ronghao 荣浩原创,转载请注明出处:)
posted on 2008-01-01 12:57 ronghao 阅读(2447) 评论(4)  编辑  收藏 所属分类: ajax相关

FeedBack:
# re: OPENAJAX HUB介绍
2008-09-01 08:38 | cn-cuckoo
祝贺你的书出版了。我在翻译《Advanced Ajax》附录时,把Hub的subscribe翻译成“预订”了。  回复  更多评论
  
# re: OPENAJAX HUB介绍[未登录]
2008-09-01 09:24 | ronghao
呵呵,谢谢:)  回复  更多评论
  
# re: OPENAJAX HUB介绍
2009-03-31 10:16 | shuttle
tks,不错,有机会多向你请教。  回复  更多评论
  
# re: OPENAJAX HUB介绍
2012-05-17 14:15 | 欧昭平
@shuttle
麻烦能不能给我个open ajax的实例 谢谢  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航:
 
<2008年9月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

关注工作流和企业业务流程改进。现就职于ThoughtWorks。新浪微博:http://weibo.com/ronghao100

常用链接

留言簿(38)

随笔分类

随笔档案

文章分类

文章档案

常去的网站

搜索

  •  

最新评论

阅读排行榜

评论排行榜