OpenAjax HubQ?#8220;Hub”Q主要用来处?span lang="EN-US">Web应用开发者需要在同一个应用中同时使用多个AJAXq行库的情况。它提供标准?span lang="EN-US">JavaScriptQ当被包含在AJAX驱动?span lang="EN-US">Web应用里时Q它使得多个AJAX工具包能够在同一个页面里一起协同工作?span lang="EN-US">
AJAX应用开发者在开发中的需求往往存在着巨大的差异,q导致了(jin)如今?jng)场上存在超q?span lang="EN-US">200个各U各L(fng)AJAX产品Q同时这些品的架构和特性也存在巨大的差异。对一些开发者来_(d)他们认ؓ(f)开发中最重要的因素是扑ֈ一个能提供与后端服务器强大集成能力?span lang="EN-US">AJAX工具包?span lang="EN-US">
而对其他一些开发者来_(d)最重要的因素则是能否应用特D的客户端组Ӟ例如Q富数据|格lg或交互式的图表组Ӟ(j)。结果,AJAX生态系l发展到现在Q开发者在大部分时间里都能扑ֈ满他们每个Ҏ(gu)需求的AJAX工具包,但是也存在问题,他们往往必须在同一?span lang="EN-US">Web应用里合和匚w使用多个AJAX工具包才能满x(chng)有的需求?span lang="EN-US">
Hub应用的一个重要场合是门户和内容糅合,q里Q应用开发者创Z个页面,面里松散组装预先包装好的应用组件?span lang="EN-US">Hub实际上是保证q些AJAX驱动的应用组件能够用多个不同的AJAX工具包创建?span lang="EN-US">
主要Ҏ(gu):(x)Hub 的发?span lang="EN-US">/订阅理?span lang="EN-US">
Hub的主要特性是它的发布/订阅理器(“pub/sub理?#8221;Q?pub/sub理器允许内容糅合的一个部分能够传播其他应用组件所订阅的事件。例如,假设存在一个日历组Ӟ该组件允许用戯够选取一个特定的日期。内容糅合里可能存在多个UIlgQ这些组仉需要根据新选择的日历日期而更新它们的视觉外观。在q种情况下,日历lg发布一?#8220;新日历日?#8221;的事Ӟ而其他可视化lg订阅这个事件。因此,pub/sub理器的通用消息的优Ҏ(gu)l由不同AJAX工具包所构徏的组件之间提供了(jin)一个关键的集成机制?span lang="EN-US">
Hub?span lang="EN-US">pub/sub理器提供各U各L(fng)先进Ҏ(gu),例如对事件名U通配W的强大支持Q在下面的例子里q没有展C个特性?span lang="EN-US">
范例
让我们假讄在有q样一个商务智能应用,该应用用下面的AJAXq行库:(x)
?UTILS.js, Ҏ(gu)览器?span lang="EN-US">JavaScript环境提供非常有用的扩展,例如XMLHttpRequest?span lang="EN-US">APIs?span lang="EN-US">
?CALENDAR.js,提供一个日历组?span lang="EN-US">
?CHARTS.js, 提供一个图表组?span lang="EN-US">
?span style="font-family: "Times New Roman"; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">
DATAGRID.js,提供一个交互式的数据网格组?span lang="EN-US">
该应用有一个唯一的日历组Ӟ用户可以以图表组件的形式Q例如,每日情Ş、每周情形、每月情形和每年情Ş的柱状图Q和数据|格lg的Ş式(例如Q地Ҏ(gu)据与全国数据Q两U数据都以用户选择的感兴趣的列展示Q选择其中的一些数据视?span lang="EN-US">
实现该应用的一个方法是在加载其?span lang="EN-US">AJAX库之前加?span lang="EN-US">OpenAjax Hub?span lang="EN-US">JavaScript。例如:(x)
一?span lang="EN-US">AJAXq行库包?span lang="EN-US">OpenAjax HubQ将Hub作ؓ(f)它们标准发布的一部分Q在q种情况下,只要特定?span lang="EN-US">AJAXq行期的JavaScriptQ译注:(x)q里特定?span lang="EN-US">JavaScript指的是包含OpenAjax Hub?/span>AJAXq行库的代码Q在其他兼容OpenAjax的运行库之前被加载,那么则没有必要ؓ(f)OpenAjax.js使用一个单独的<script>元素?span lang="EN-US">
要应用工作Q开发者需要注册一个回调函敎ͼ当用户在日历lg里选择一个新的日期时调用该函数。这个回调函数接着使用OpenAjax Hub?span lang="EN-US">publish()函数传播q个新日期事Ӟ(x)
接着开发者需要开发这样一些代码:(x)所有的图表lg和数据网格组仉要订阅这个新日期事gQƈ要提供一个回调函数。各个回调函数将相应地更新特定的可视化组Ӟ(x)
未来支持OpenAjax
Hub的工具包
OpenAjax联盟正与工业界一起合作,辑ֈ?span lang="EN-US">OpenAjax Hub的广泛支持。一个特D的AJAX工具包可以像下面q样支持OpenAjax HubQ?span lang="EN-US">
?AJAX工具包可以包?span lang="EN-US">HubQ最好的方式Q?span lang="EN-US">Hub可以被小?span lang="EN-US">3K?span lang="EN-US">JavaScript实现Q所以一?span lang="EN-US">AJAX工具包简单地捆绑HubQ将它作为它们工具包的一个标准组件?span lang="EN-US">
?如果Hub在运行环境里可用则用它。其他一?span lang="EN-US">AJAX工具包可能决定在它们的发布中q不包含HubQ它们会(x)(g)?span lang="EN-US">Hub是否早先已经被加载了(jin)Q如果已l加载,它们则直接?span lang="EN-US">Hub的服务?span lang="EN-US">
?/span>W三方的开发者可以开发适配器。对大多数工具包来说Q它们可能允许第三方的开发者编写少量的JavaScript使得自己能够支持Hub?span lang="EN-US">
?span lang="EN-US">AJAX工具包包含内|对Hub的支持时Q应用开发者的工作更加容易,但是通过查找或编写适配器的方式Q?span lang="EN-US">Hub依然可以被那些ƈ未实现支?span lang="EN-US">Hub的工具包所使用?span lang="EN-US">