EventBus quando se trata de Java<\/A>. Basicamente, é um sistema singleton ou global de mensagens para sua aplicação.<\/P><\/P>
O que você pode estar fazendo agora<\/STRONG><\/SPAN><\/P>Vamos supor, por exemplo, que você tenha dois widgets que deseja usar em sua aplicação e queira passar informações entre eles. Você poderia tentar passar cada widget para o outro e tentar escutar eventos, mas isso ficaria desorganizado muito rapidamente. Você poderia simplesmente ter um único módulo escutando eventos em cada widget, algo parecido com isto.<\/P><\/P>on(widget1, 'load', function() {
widget2.doSomething();
});
on(widget2, 'load', function() {
widget1.doSomething();
});<\/PRE><\/P>Isso não é tão ruim, mas se sua aplicação crescer, você vai perceber que isso pode ficar feio e difícil de depurar depois de um tempo.<\/P><\/P>O que você poderia estar fazendo<\/STRONG><\/SPAN><\/P>Aqui é onde dojo\/topic entra. Cada widget pode usar dojo\/topic para se inscrever em certas mensagens. Isso é semelhante a eventos, mas não depende de dijits individuais.<\/P><\/P>topic.subscribe('dijit-message', function(payload) { \/** faça algo **\ });<\/PRE>Então qualquer dijit ou outra parte da sua aplicação pode publicar nesse canal.<\/P><\/P>topic.publish('dijit-message', { message: 'hello' });<\/PRE><\/P>Note os métodos subscibe\/publish<\/EM>? Isso mesmo, dojo\/topic<\/EM> é um
demonstração simples<\/A> de como você pode usar isso em sua aplicação.<\/P>require([
'esri\/map',
'dojo\/_base\/_declare',
'dojo/on',
'dojo/topic',
'put-selector',
'dijit\/_WidgetBase',
'dojo/domReady!'
], function(Map, declare, on, topic, put, _WidgetBase) {
var Dijit1 = declare([_WidgetBase], {
postCreate: function() {
this.btnNode = put(this.domNode, 'button', 'Clique em mim!');
this.own(on(this.btnNode, 'click', this.onClick.bind(this)),
topic.subscribe('dijit2-click', function(data) {
var oldValue = this.btnNode.innerHTML;
this.btnNode.innerHTML = data.value;
setTimeout(function() {
this.btnNode.innerHTML = oldValue;
}.bind(this), 1000);
}.bind(this)));
},
onClick: function() {
topic.publish('dijit1-click', { value: 'Olá do dijit1!' });
}
});
var Dijit2 = declare([_WidgetBase], {
postCreate: function() {
this.btnNode = put(this.domNode, 'button', 'Clique em mim!');
this.own(on(this.btnNode, 'click', this.onClick.bind(this)),
topic.subscribe('dijit1-click', function(data) {
var oldValue = this.btnNode.innerHTML;
 .& nbsp.& nbsp.& nbsp.& nbsp.& nbsp.& nbsp.; this.btnNode.innerHTML = data.value;
 .& nbsp.& nbsp.& nbsp.& nbsp.& nbsp.& nbsp.; setTimeout(function() {
 .& nbsp.& nbsp.& nbsp.& nbsp.& nbsp.& nbsp.& nbsp.; this.btnNode.innerHTML = oldValue;
 .& nbsp.& nbsp.& nbsp.& nbsp.; }.bind(this), 1000);
. & nbsp.; }.bind(this)));
& nbsp.; },
& nbsp.; onClick: function() {
& nbsp.; & nbsp.; topic.publish('dijit2-click', { value: 'Olá do dijit2!' });
& nbsp.; }
& nbsp.; });
& nbsp.;
& nbsp.; var d1 = new Dijit1(null, document.getElementById('dijit1'));
& nbsp.; var d2 = new Dijit2(null, document.getElementById('dijit2'));
& nbsp.;
& nbsp.; var map = new Map('map', {
& nbsp.; & nbsp.; center: [-118, 34.5],
& nbsp.; & nbsp.; zoom: 8,
& nbsp.; & nbsp.; basemap: 'topo'
& nbsp.; });
});< /PRE >< P >< / P >< P >< SPAN style = " font-size: 14pt ; " >< STRONG >Você consegue ver a luz?< / STRONG >< / SPAN >< / P >< P >Espero que você consiga ver como isso pode ser uma maneira poderosa de passar dados entre seus widgets personalizados na sua aplicação. Eu uso isso bastante para gerenciar quais widgets estão visíveis em uma aplicação. Por exemplo, clique em um botão, mostre o widget1< /EM>, clique em outro botão, feche o widget1< /EM> e abra o widget2< /EM>. Também uso para passar uma feature da qual outros widgets podem depender.< / P >< P >< / P >< P >Existem muitas maneiras criativas de usar o dojo/topic< /EM> na sua aplicação. Esta foi apenas uma introdução rápida a um módulo que acho útil diariamente.< / P >< / BODY >< / HTML >