这俩个函数都与事件紧密相关.

-- dojo.subscribe(/*String*/topic, /*Object|null*/context, /*String|Function*/method) 订阅一个主题

-- dojo.publish(/*String*/topic, /*Array*/ args) 发布一个主题

先抛开这两个函数, 现在有一个函数

  1. function topic() {
  2. console.log("I'm the topic.");
  3. }

它仅打印包含自己名字的一句话. 现在我们想在 topic() 被调用的时候 同时调用下面这个 listener() 函数.

  1. function listener() {
  2. console.log("I'm a listener.");
  3. }

最容易想到的方法就是:

  1. function topic() {
  2. console.log("I'm the topic.");
  3. //add here
  4. listener();
  5. }

这样做缺点很明显:

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相关推荐

  1. Dojo学习笔记(8. dojo.event dojo.event.topic dojo.event.browser)

    Dojo学习笔记(8. dojo.event & dojo.event.topic & dojo.event.browser) 模块:dojo.event 终于进入有名的dojo事件处 ...

  2. dojo 官方翻译 dojo/_base/array 版本1.10

    官方地址:http://dojotoolkit.org/reference-guide/1.10/dojo/_base/array.html#dojo-base-array array模块dojo进行 ...

  3. ArcGIS中加载模块时dojo/domReady!和dojo/ready的区别

    我们在使用ArcGIS Javascript  API开发时,最开始要先加载模块: <script>require(["esri/map", "dojo/do ...

  4. dojo Quick Start/dojo入门手册--package机制

    说完了dojo里的类继承机制,不得不说说package机制. 主要用到的有 dojo.require dojo.provide dojo.registerModulePath dojo.require ...

  5. dojo Quick Start/dojo入门手册--面向对象,定义Class

    下一步我们看看dojo里如何定义Class: dojo.declare("Customer",null,{     constructor:function(name){      ...

  6. dojo Quick Start/dojo入门手册--dojo.hitch scope/context

    既然用到了xmlhttp,一个常见的问题就是回调函数的scope/context.在prototype.mootools里我们常用Function.bind,在dojo中,做相同事情的东西叫做dojo ...

  7. dojo Quick Start/dojo入门手册--xmlhttp dojo.xhrGet

    OK,介绍了简单的DOM操作方法,接下来该到Ajax的传统项目-XmlHttp了.在使用xmlhttp时,需要注意到编码的问题,要让dojo默认绑定为utf-8怎么办呢?很简单,只需要修改一下引入do ...

  8. dojo Quick Start/dojo入门手册--开始使用dojo.js

    2006年初,dojo还是0.22的时候就很关注它的发展,可一直没有在实际项目中使用.一来是由于文档的缺少,而来是dojo的相关介绍总是让人望而生畏. 到现在都如此,第一个hello world就搞了 ...

  9. jquery订阅发布插件代码草稿,为jquery扩展jquery.publish,jquery.subscribe方法

    jquery订阅发布插件代码草稿! jquery订阅发布插件代码草稿,为jquery扩展jquery.publish,jquery.subscribe方法 --- jquery订阅发布插件代码草稿 & ...

最新文章

  1. 重磅!Facebook更新PyTorch 1.1,打算跨GPU分割神经网络
  2. 笔记本怎么桌面显示计算机,笔记本电脑桌面不显示了如何解决
  3. Java中ListE对象赋值问题(引用传递和值传递)
  4. python——学习笔记2
  5. 东南亚跨境电商为什么推荐ERP仓储系统?
  6. paip.命令行执行js
  7. 深入浅出统计学读书笔记汇总
  8. 高德地图No implementation found for long com.autonavi.amap.mapcore.MapCore
  9. python大漠库_python类似大漠插件的库
  10. Java图像处理——美颜相机项目核心
  11. 关于2022年电改政策的解读
  12. Ubuntu设置开机自动启动脚本/程序的各种方法
  13. NoSQLBooster for MongoDB基本使用步骤
  14. Chrome屏蔽广告
  15. 我用java写了个壁纸软件
  16. bubbles html5游戏源码,html5 canvas弹性气泡爆破 | 撒花动画
  17. Web开发入门不得不看
  18. OpenCV—python 自动色彩均衡(ACE)
  19. Web3 时代 市场营销的变迁
  20. 【25】核心易中期刊推荐——智能控制机器人

热门文章

  1. 无状态的HTTP协议
  2. 计算机启动到安全模式,计算机启动每次都进入安全模式怎么办
  3. 简单的docker-compose编写介绍(包含 nginx+tomcat 实例演示)
  4. 女朋友生气了,日常生活中该具体怎么做才好,才好女朋友开心?
  5. .hpp文件_3 OpenCV的头文件说明及第一个示例程序
  6. 古风登陆html,再祭古风扬 文/凌霄一羽
  7. mysql微服务查询问题_微服务架构下,Mysql读写分离后,数据库CPU飙升卡壳问题解析...
  8. selenium 翻页_利用selenium实现自动翻页爬取某鱼数据
  9. java学jdk几_Java系列学习(一)-JDK下载与安装
  10. java mapreduce 实例_MapReduce -- JAVA 实例(一)计算总数