dojo.publish 和 dojo.subscribe
这俩个函数都与事件紧密相关.
-- dojo.subscribe(/*String*/topic, /*Object|null*/context, /*String|Function*/method) 订阅一个主题
-- dojo.publish(/*String*/topic, /*Array*/ args) 发布一个主题
先抛开这两个函数, 现在有一个函数
- function topic() {
- console.log("I'm the topic.");
- }
它仅打印包含自己名字的一句话. 现在我们想在 topic() 被调用的时候 同时调用下面这个 listener() 函数.
- function listener() {
- console.log("I'm a listener.");
- }
最容易想到的方法就是:
- function topic() {
- console.log("I'm the topic.");
- //add here
- 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 就是这样工作的, 想了解具体实现细节去读 connect.js 和 event.js(DOM事件相关).
dojo.publish 和 dojo.subscribe相关推荐
- Dojo学习笔记(8. dojo.event dojo.event.topic dojo.event.browser)
Dojo学习笔记(8. dojo.event & dojo.event.topic & dojo.event.browser) 模块:dojo.event 终于进入有名的dojo事件处 ...
- dojo 官方翻译 dojo/_base/array 版本1.10
官方地址:http://dojotoolkit.org/reference-guide/1.10/dojo/_base/array.html#dojo-base-array array模块dojo进行 ...
- ArcGIS中加载模块时dojo/domReady!和dojo/ready的区别
我们在使用ArcGIS Javascript API开发时,最开始要先加载模块: <script>require(["esri/map", "dojo/do ...
- dojo Quick Start/dojo入门手册--package机制
说完了dojo里的类继承机制,不得不说说package机制. 主要用到的有 dojo.require dojo.provide dojo.registerModulePath dojo.require ...
- dojo Quick Start/dojo入门手册--面向对象,定义Class
下一步我们看看dojo里如何定义Class: dojo.declare("Customer",null,{ constructor:function(name){ ...
- dojo Quick Start/dojo入门手册--dojo.hitch scope/context
既然用到了xmlhttp,一个常见的问题就是回调函数的scope/context.在prototype.mootools里我们常用Function.bind,在dojo中,做相同事情的东西叫做dojo ...
- dojo Quick Start/dojo入门手册--xmlhttp dojo.xhrGet
OK,介绍了简单的DOM操作方法,接下来该到Ajax的传统项目-XmlHttp了.在使用xmlhttp时,需要注意到编码的问题,要让dojo默认绑定为utf-8怎么办呢?很简单,只需要修改一下引入do ...
- dojo Quick Start/dojo入门手册--开始使用dojo.js
2006年初,dojo还是0.22的时候就很关注它的发展,可一直没有在实际项目中使用.一来是由于文档的缺少,而来是dojo的相关介绍总是让人望而生畏. 到现在都如此,第一个hello world就搞了 ...
- jquery订阅发布插件代码草稿,为jquery扩展jquery.publish,jquery.subscribe方法
jquery订阅发布插件代码草稿! jquery订阅发布插件代码草稿,为jquery扩展jquery.publish,jquery.subscribe方法 --- jquery订阅发布插件代码草稿 & ...
最新文章
- 重磅!Facebook更新PyTorch 1.1,打算跨GPU分割神经网络
- 笔记本怎么桌面显示计算机,笔记本电脑桌面不显示了如何解决
- Java中ListE对象赋值问题(引用传递和值传递)
- python——学习笔记2
- 东南亚跨境电商为什么推荐ERP仓储系统?
- paip.命令行执行js
- 深入浅出统计学读书笔记汇总
- 高德地图No implementation found for long com.autonavi.amap.mapcore.MapCore
- python大漠库_python类似大漠插件的库
- Java图像处理——美颜相机项目核心
- 关于2022年电改政策的解读
- Ubuntu设置开机自动启动脚本/程序的各种方法
- NoSQLBooster for MongoDB基本使用步骤
- Chrome屏蔽广告
- 我用java写了个壁纸软件
- bubbles html5游戏源码,html5 canvas弹性气泡爆破 | 撒花动画
- Web开发入门不得不看
- OpenCV—python 自动色彩均衡(ACE)
- Web3 时代 市场营销的变迁
- 【25】核心易中期刊推荐——智能控制机器人
热门文章
- 无状态的HTTP协议
- 计算机启动到安全模式,计算机启动每次都进入安全模式怎么办
- 简单的docker-compose编写介绍(包含 nginx+tomcat 实例演示)
- 女朋友生气了,日常生活中该具体怎么做才好,才好女朋友开心?
- .hpp文件_3 OpenCV的头文件说明及第一个示例程序
- 古风登陆html,再祭古风扬 文/凌霄一羽
- mysql微服务查询问题_微服务架构下,Mysql读写分离后,数据库CPU飙升卡壳问题解析...
- selenium 翻页_利用selenium实现自动翻页爬取某鱼数据
- java学jdk几_Java系列学习(一)-JDK下载与安装
- java mapreduce 实例_MapReduce -- JAVA 实例(一)计算总数