Dojo的subscribe和publish的简单使用

问题描述:

  假设在你的页面有一个对话框,对话框中包含FilteringSelect这样的需要store的控件,在打开对话框时需要对这个控件做两件事情,一是给该控件的store填充数据,二是要给该控件设置值,其中要填充的数据来自网络,而要设置的值可能来自当前包含对话框的页面,一般的做法是先给store填充数据,然后设置值,那么这会出现一个问题,无法给该控件设置值。

解决方法:

  导致这个问题的原因是因为网络下载数据的速度一般都没有从本地获得数据再设置值快,重点是这不是一个同步操作,而是一个异步操作。首先可以想到的解决办法是看FilteringSelect有没有加载完成store的事件,通过事件的回调函数来设置值,但自己没找到,再找Memory有没有类似的事件,也没找到。

  那怎么办呢?我们可以利用topic的subscribe和publish来实现事件的模拟。当我们在给FilteringSelect填充数据后发布一个topic,然后当接收到这个topic后再设置该控件的值,这样就能实现类似事件的消息机制。

  当然,如果能用事件实现尽量用事件实现,因为事件的逻辑看起来更清晰和自然,其它方式的话也可以使用promise来实现。

时间: 2024-10-13 06:10:56

Dojo的subscribe和publish的简单使用的相关文章

React:消息订阅(subscribe)-发布(publish)机制

使用消息订阅(subscribe)-发布(publish)机制 发布类似触发事件 订阅类似监听事件 使用这种方式的好处是,兄弟组件间通信不必再像使用props那种通过父组件来通信,多层组件之间通信也不必在一层一层的传递, 直接在触发事件的组件中一个发布消息 监听组件中订阅消息即可: 1) 工具库: PubSubJS 2) 下载: npm install pubsub-js --save 3) 使用: import PubSub from 'pubsub-js' //引入 PubSub.publi

基于 Dojo toolkit 实现 web2.0 的 MVC 模式

前言 MVC 模式是设计模式中的经典模式,它可以有效的分离数据层,展示层,和业务逻辑层.Web2.0 技术由于其良好的用户体验被广泛应用于 WEB 应用的展示层.但是在传统的 web 开发中,展示层的和业务逻辑层代码大量耦合,使得应用的可扩展性严重降低,同时页面层代码的可复用性也很低.本文用实例介绍,如何使用 dojo toolkit 扩展 dojo 的页面控件并实现 MVC 模式,有效的分离了展示层与业务逻辑层的代码,同时使得展示层代码可复用性大大提高. 第一部分:Dojo 构造 MVC 与传

Akka源码分析-Cluster-Distributed Publish Subscribe in Cluster

在ClusterClient源码分析中,我们知道,他是依托于"Distributed Publish Subscribe in Cluster"来实现消息的转发的,那本文就来分析一下Pub/Sub是如何实现的. 还记得之前分析Cluster源码的文章吗?其实Cluster只是把集群内各个节点的信息通过gossip协议公布出来,并把节点的信息分发出来.但各个actor的地址还是需要开发者自行获取或设计的,比如我要跟worker通信,那就需要知道这个actor在哪个节点,通过actorPa

RabbitMQ学习第三记:发布/订阅模式(Publish/Subscribe)

工作队列模式是直接在生产者与消费者里声明好一个队列,这种情况下消息只会对应同类型的消费者. 举个用户注册的列子:用户在注册完后一般都会发送消息通知用户注册成功(失败).如果在一个系统中,用户注册信息有邮箱.手机号,那么在注册完后会向邮箱和手机号都发送注册完成信息.利用MQ实现业务异步处理,如果是用工作队列的话,就会声明一个注册信息队列.注册完成之后生产者会向队列提交一条注册数据,消费者取出数据同时向邮箱以及手机号发送两条消息.但是实际上邮箱和手机号信息发送实际上是不同的业务逻辑,不应该放在一块处

理解 Redis(9) - Publish Subscribe 消息订阅

在窗口1开通一个名为 redis 的通道: 127.0.0.1:6379> SUBSCRIBE redis Reading messages... (press Ctrl-C to quit) 1) "subscribe" 2) "redis" 3) (integer) 1 从窗口2传入信息: 127.0.0.1:6379> PUBLISH redis hi (integer) 1 此时窗口1会收到这条信息: 127.0.0.1:6379> SUB

Dojo

dojo的类机制支持类声明.继承.调用父类方法等功能.dojo在底层实现上是通过操作原型链来实现其类机制的,而在实现继承时采用类式继承的方式.值得一提的是,dojo的类机制允许进行多重继承(注意,只有父类列表中的第一个作为真正的父类,其它的都是将其属性以mixin的方法加入到子类的原型链中),为解决多重继承时类方法的顺序问题,dojo用JavaScript实现了Python和其它多继承语言所支持的C3父类线性化算法,以实现线性的继承关系,想了解更多该算法的知识,可参考这里,我们在后面的分析中将会

dojo chart详解

Dojo提供了一套很完善的统计图(Chart)接口,在dojox/charting下面,可以支持很多种类型的. 1.简介 Dojo统计图提供快速的.简单的接口实现美观的.交互性强的web统计图表的实现. 1.1 基本图表 下面的代码展示的是如何用html和dojo实现一个简单的统计图. HTML: <divid="simplechart"style="width: 250px; height: 150px; margin: 5px auto0px auto;"

翻译 - Ajax with dojo/request

原文:Ajax with dojo/request dojo/request是自Dojo1.8才引入的新API,用于客户端向服务端发起请求.本教程主要介绍dojo/request的API:你将会学到如何从服务端获取一个文本文件,如果有错误发生该如何处理,向服务端提交数据,通知API的优点,使用注册表用于使用同样的代码从不同地址请求数据. 开始 dojo/request允许你在不刷新页面的情况下向服务端发送数据或从服务端接收数据(通常所有的AJAX).这个新功能引入了如何写出更紧凑的代码及如何快速

实现一个简单的订阅与发布模式的代码块,和redux

/** * Created by Mrzou on 2018/3/11. */ //实现简单的订阅与发布模式的代码块export function pattern() { let currentListeners = [] function subscribe(type, listener) { if ((typeof listener !== 'function') || (typeof listener !== 'string')) { throw new Error('参数类型错误') }