dojo.publish 和 dojo.subscribe
這倆個函數都與事件緊密相關.
-- dojo.subscribe(/*String*/topic, /*Object|null*/context, /*String|Function*/method) 訂閱一個主題
-- dojo.publish(/*String*/topic, /*Array*/ args) 發(fā)布一個主題
先拋開這兩個函數, 現在有一個函數
它僅打印包含自己名字的一句話. 現在我們想在 topic() 被調用的時候 同時調用下面這個 listener() 函數.?
最容易想到的方法就是:
這樣做缺點很明顯:?
1. 如果我還想隨著 topic() 的調用, 調用更多的函數如 listener1(), listener2(), ..., listenern(), 就得不斷地去修改 topic() 的代碼.
2. topic() 與 listener() 函數之間緊耦合
dojo.subscribe and dojo.publish 機制很好的解決了這個問題.
我們知道 JavaScript 函數也是對象, 也可以有屬性.
如果給上面的 topic 函數加一個數組類型的屬性 _listeners[] , 它記錄著像上面例子中的 listener1(), listener2() 這樣的函數
并通過 dojo.subscribe() 可以隨意隨時的向 _listeners[] 里面加入 listener() 函數. dojo.unsubscribe() 移除 _listeners[] 里面的指定函數.
dojo.publish() 就起到了一個調用的作用, 它調用 topic() 函數, 并且遍歷 _listeners[] 數組里的所有 listener() 函數, 并調用它們.
簡單的說 dojo sub / pub 就是這樣工作的, 想了解具體實現細節(jié)去讀 connect.js 和 event.js(DOM事件相關).
總結
以上是生活随笔為你收集整理的dojo.publish 和 dojo.subscribe的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用Sense操作ElasticSear
- 下一篇: maven创建的工程eclipse 项目