dojo.publish 和 dojo.subscribe
這倆個函數(shù)都與事件緊密相關(guān).
-- dojo.subscribe(/*String*/topic, /*Object|null*/context, /*String|Function*/method) 訂閱一個主題
-- dojo.publish(/*String*/topic, /*Array*/ args) 發(fā)布一個主題
先拋開這兩個函數(shù), 現(xiàn)在有一個函數(shù)
它僅打印包含自己名字的一句話. 現(xiàn)在我們想在 topic() 被調(diào)用的時候 同時調(diào)用下面這個 listener() 函數(shù).?
最容易想到的方法就是:
這樣做缺點很明顯:?
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)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用Sense操作ElasticSear
- 下一篇: maven创建的工程eclipse 项目