訂閱者/發布者模式,自定義消息類型的工具庫:Msg
關于Msg
Msg是基于訂閱者/發布者模式的事件庫,事件被抽象為消息訂閱/消息傳播
模式。Msg 為 Message 的縮寫。
API介紹
Msg 的API 比較簡單,其介紹都濃縮在test.html
頁面中,將js部分粘貼如下
(function() { var test = new Msg() //test on //普通綁定 test.on('msg1', function() { console.log(arguments) }) //多次綁定 test.on('msg1', function() { console.log(arguments) console.log('msg1 二次綁定') }) //批量綁定 test.on(['msg2', 'msg3', 'msg4', 'msg5', 'msg6'], function() { console.log(arguments) }) console.log(test) //test spread //觸發全部 test.spread() //觸發全部并攜帶數據 test.spread(null, '觸發全部并攜帶數據 * 1', '觸發全部并攜帶數據l * 2') //觸發一類消息 test.spread('msg1', '觸發一類消息 msg1 * 1') //觸發一組消息類型 test.spread(['msg2', 'msg3', 'msg4', 'msg1'], '觸發一組消息類型') //test once test.once('test_once', function(msg) { console.log('觸發一次后,接觸綁定 ' + msg) }) test.on('test_once', function(msg) { console.log('雖然也是test_once,但用on 綁定,所以還在綁定中 \n' + msg) }) test.spread('test_once', 'test_once done!') setTimeout(function() { test.spread('test_once', '測試是否解除了 once 的綁定,由于是異步刪除,所以也得異步測試') }, 10) // test hold test.hold('test_hold', 5, function(times) { console.log('hold 方法可以掛起事件,在觸發次數達到指定次數之后, 才作出反應:' + times) }) test.spread('test_hold', 1) test.spread('test_hold', 2) test.spread('test_hold', 3) test.spread('test_hold', 4) test.spread('test_hold', 5) test.spread('test_hold', '達到次數后,就可以自如啟動反應了') //test tie //設置命名空間,可以方便的用 test.off('.nameSpace') 一次性解除 test.tie(['tie1.nameSpace', 'tie2.nameSpace', 'tie3.nameSpace', 'tie4.nameSpace'], function(tie1, tie2, tie3, tie4) { console.log('tie 方法綁定所有事件,在它們至少都被觸發過一次之后,才產生反應') console.log(arguments) }) test.spread('tie2', 'tie2 data', 'tie2 data', 'tie2 data') test.spread('tie4', 'tie4 data') test.spread('tie1', 'tie1 data') test.spread('tie3', 'tie3 data do') test.spread('tie3', 'tie3 data done') //test tick test.tick('msg2', 'tick 是異步啟動') test.spread('msg2', 'spread 是同步啟動,所以這條消息應該在tick之前') //test delay test.delay(1000, 'msg2', 'delay 是延遲啟動,這條消息在1000后才發出來') //test off //取消一類消息 test.off('msg3') test.spread('msg3', 'msg2已經被取消,這條消息不會出現') //根據命名空間取消消息反應 test.off('.nameSpace') //取消一組消息類型 test.off(['msg1', 'msg4', 'msg5']) test.spread(['msg1', 'msg4', 'msg5', 'msg6'], '這組消息隊列大多被取消了,只剩msg6') //取消所有消息反應 setTimeout(function() { test.off() test.spread(null, '前面有測試延遲啟動,時常為1秒,所以取消所有消息反應的測試,也應在1秒后進行,這條消息不會出現在控制臺,因為所有消息反應都被取消') }, 1000) }());
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!