日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

dojo.publish 和 dojo.subscribe

發(fā)布時間:2024/1/23 编程问答 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 dojo.publish 和 dojo.subscribe 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

這倆個函數(shù)都與事件緊密相關(guān).

-- dojo.subscribe(/*String*/topic, /*Object|null*/context, /*String|Function*/method) 訂閱一個主題

-- dojo.publish(/*String*/topic, /*Array*/ args) 發(fā)布一個主題


先拋開這兩個函數(shù), 現(xiàn)在有一個函數(shù)


  • function?topic()?{??
  • ????console.log("I'm?the?topic.");??
  • }??

  • 它僅打印包含自己名字的一句話. 現(xiàn)在我們想在 topic() 被調(diào)用的時候 同時調(diào)用下面這個 listener() 函數(shù).?

  • function?listener()?{??
  • ????console.log("I'm?a?listener.");??
  • }??

  • 最容易想到的方法就是:

  • function?topic()?{??
  • ????console.log("I'm?the?topic.");??
  • ????//add?here??
  • ????listener();??
  • }??

  • 這樣做缺點很明顯:?

    1. 如果我還想隨著 topic() 的調(diào)用, 調(diào)用更多的函數(shù)如 listener1(), listener2(), ..., listenern(), 就得不斷地去修改 topic() 的代碼.

    2. topic() 與 listener() 函數(shù)之間緊耦合


    dojo.subscribe and dojo.publish 機制很好的解決了這個問題.

    我們知道 JavaScript 函數(shù)也是對象, 也可以有屬性.

    如果給上面的 topic 函數(shù)加一個數(shù)組類型的屬性 _listeners[] , 它記錄著像上面例子中的 listener1(), listener2() 這樣的函數(shù)

    并通過 dojo.subscribe() 可以隨意隨時的向 _listeners[] 里面加入 listener() 函數(shù). dojo.unsubscribe() 移除 _listeners[] 里面的指定函數(shù).

    dojo.publish() 就起到了一個調(diào)用的作用, 它調(diào)用 topic() 函數(shù), 并且遍歷 _listeners[] 數(shù)組里的所有 listener() 函數(shù), 并調(diào)用它們.


    簡單的說 dojo sub / pub 就是這樣工作的, 想了解具體實現(xiàn)細(xì)節(jié)去讀 connect.js 和 event.js(DOM事件相關(guān)).

    總結(jié)

    以上是生活随笔為你收集整理的dojo.publish 和 dojo.subscribe的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。