javascript事件匯流排
事件模式是介面層主要模式,MVC模式中,模型元件應該和介面形成松耦合,只要介面發出事件,就應該立即響應,MVC模式也是依靠事件模式來實現彼此聯絡,所以,有時,我們拋開MVC模式這個鍋蓋,專注於事件模式,反而會有一種比較開闊的感覺。
Javascript可以避免錯誤型別的共享,以及避免UI介面執行緒,這樣實現事件模式就非常簡單(相對Java等語言),
事件型別eventType用來標識傳給匯流排訊息型別,是一個重要的輸入引數,當然我們可以使用字串來實eventType,比如"mySendEvent",但是使用一個和目標target繫結機制可能更好,如下:
使用註冊事件型別如下:
我們可以使用下面程式碼啟用事件:
這個事件匯流排可以加入更多功能:日誌logging, 跟蹤tracing, 轉換translation, or 定期執行scheduled execution(切分啟用動作單獨執行,非同步,這樣可以避免堵塞UI執行緒)。
相比伺服器端的事件模式,JS實現起來夠簡單。
Javascript可以避免錯誤型別的共享,以及避免UI介面執行緒,這樣實現事件模式就非常簡單(相對Java等語言),
[URL=http://blogs.msdn.com/simonince/archive/2009/12/21/a-javascript-event-bus.aspx]A JavaScript Event Bus[/URL]一文給出了Javascript的事件匯流排event bus實現案例。
使用一個Event Bus接受所有的事件,然後釋出給所有的監聽者:
Type.registerNamespace('Sample') //建立一個事件匯流排 Sample.EventBus = function() { Sample.EventBus.initializeBase(this); } Sample.EventBus.prototype = { //一對一啟用提交事件 subscribe: function subscribe(eventType, callback) { this.get_events().addHandler(eventType, callback); }, //一對多廣播發布事件 publish: function publish(eventType, arg) { var handler = this.get_events().getHandler(eventType); if (handler) handler(arg); } } Sample.EventBus.registerClass('Sample.EventBus', Sys.Component); <p class="indent"> |
事件型別eventType用來標識傳給匯流排訊息型別,是一個重要的輸入引數,當然我們可以使用字串來實eventType,比如"mySendEvent",但是使用一個和目標target繫結機制可能更好,如下:
Sample.EventBus.registerEventType = function registerEventType(target, eventType) { if (!target.Events) target['Events'] = {}; target.Events[eventType] = eventType; } <p class="indent"> |
使用註冊事件型別如下:
// simple class to carry data values with event //建立一個帶有事件資料的物件 Sample.Payload = function(dataValue) { this.data = dataValue; } // definition of event types relevant to Payload class Sample.EventBus.registerEventType(Sample.Payload, 'Update'); //註冊Click點按事件 Sample.EventBus.registerEventType(Sample.Payload, 'Click'); <p class="indent"> |
我們可以使用下面程式碼啟用事件:
//廣播群發事件 bus.publish(Sample.Payload.Events.Update, new Sample.Payload('Some Data')); //一對一啟用一個事件,類似MVC中Controller或Action bus.subscribe(Sample.Payload.Events.Update, function(arg) { // perform some action }); <p class="indent"> |
這個事件匯流排可以加入更多功能:日誌logging, 跟蹤tracing, 轉換translation, or 定期執行scheduled execution(切分啟用動作單獨執行,非同步,這樣可以避免堵塞UI執行緒)。
相比伺服器端的事件模式,JS實現起來夠簡單。
相關文章
- 事件匯流排事件
- 事件匯流排demo事件
- 將Abp預設事件匯流排改造為分散式事件匯流排事件分散式
- Vue事件匯流排(EventBus)Vue事件
- Vue 事件中央匯流排Vue事件
- 如何在 JavaScript 中實現 Event Bus(事件匯流排)JavaScript事件
- Flutter中的事件匯流排(EventBus)Flutter事件
- SOFA 原始碼分析— 事件匯流排原始碼事件
- Otto事件匯流排框架的使用事件框架
- 事件匯流排EventBus和觀察者模式事件模式
- 自己動手寫事件匯流排(EventBus)事件
- 事件匯流排有個 pipe 管道方法事件
- Otto - 安卓平臺上事件匯流排安卓事件
- 匯流排
- 比 EventBus 更高效的事件匯流排(BusUtils)事件
- Flutter基礎-036-事件匯流排EventBusFlutter事件
- 事件匯流排的設計與實現事件
- Vue事件匯流排(EventBus)使用詳細介紹Vue事件
- EventBridge 事件匯流排及 EDA 架構解析事件架構
- Android事件匯流排還能怎麼玩?Android事件
- 前端匯流排前端
- 如何在 pyqt 中實現全域性事件匯流排QT事件
- 風險洞察之事件匯流排的探索與演進事件
- 在vue專案中自定義事件匯流排eventHubVue事件
- 實現一個事件匯流排(vue.prototype.$bus)?事件Vue
- 高吞吐量的Java事件匯流排:MBassadorJava事件
- AndroidEventBus (事件匯流排) 的設計與實現AndroidIDEdev事件
- 元件間通訊--利用mitt實現事件匯流排元件MIT事件
- 手寫Android事件匯流排框架Eventbus(簡易版)Android事件框架
- .Net Core對於`RabbitMQ`封裝分散式事件匯流排MQ封裝分散式事件
- Android 認識EventBus輕量級事件匯流排框架Android事件框架
- 基於事件匯流排EventBus實現郵件推送功能事件
- JavaScript事件流JavaScript事件
- javaScript事件(一)事件流JavaScript事件
- ARM 匯流排協議協議
- 資料匯流排模式模式
- AHB匯流排協議協議
- AXI匯流排簡介