因爲現在的前端應用,基本上構建於jQuery之上,我們就想到了,是否可以借用jQuery裏面的off/on的事件機制,進行各前端組件間的發消息呢?!
迅速地 實踐了這種解決方案,效果還是讓我覺得驚訝不已!
消息的引入,使得模塊之間的耦合性減弱,模塊編碼時自由度增加了!而且影響更長遠的是,同時,給整個前端帶來了一個消息框架!
任何組件可以在任何有需要的情況下進行發消息,作爲被觀察者,而消息的受衆,觀察者,可以有選擇地進行處理消息!這裏面組件所需要了解的接口,就是消息定義自身,而非被觀察者大的定義,組件間“接口”被封裝成爲一個更小的粒度!進一步的深究,第二次燃起了我們的驚訝。因爲,我們最初的方案通過jQuery生成一個空的HTML DIV對象進行消息的on/off/trigger操作;而同事在網上翻閱、參考了其它文章後,發現在jQuery體系內有更好的消息框架代碼。
/**
* jquery觀察者模式消息框架
*/
(function ($) {
/*閉包內對象,屏蔽外界訪問;利用空對象作爲jQuery入參,可以僅構造一個與HTML無關的jQuery輕量級對象,但這已經足夠使用到jQuery的消息框架了*/
var o = $({});
/*擴展jQuery方法。方法名借用常用的訂閱機制術語*/
$.subscribe = function () {
o.on.apply(o, arguments);
return this;
};
$.unsubscribe = function () {
o.off.apply(o, arguments);
return this;
};
$.publish = function () {
o.trigger.apply(o, arguments);
return this;
};
} (jQuery));
jQuery這個前端組件還是非常強的,從它出來後,讓幾乎所有的HTML前端應用都基於它進行上層開發,而以jQuery爲基礎,再次擴展出一個前端消息框架也是非常棒的實踐!