EventBus im Zusammenhang mit Java<\/A>. Es ist im Grunde ein Singleton oder ein globales Nachrichtensystem für Ihre Anwendung.<\/P><\/P>
Was Sie jetzt vielleicht tun<\/STRONG><\/SPAN><\/P>Angenommen, Sie haben zwei Widgets, die Sie in Ihrer Anwendung verwenden möchten, und Sie wollen Informationen zwischen ihnen austauschen. Sie könnten versuchen, jedes Widget in das andere zu übergeben und auf Ereignisse zu hören, aber das würde ziemlich schnell unübersichtlich werden. Sie könnten einfach ein einzelnes Modul haben, das auf Ereignisse in jedem Widget hört, ähnlich wie hier.<\/P><\/P>on(widget1, 'load', function() {
widget2.doSomething();
});
on(widget2, 'load', function() {
widget1.doSomething();
});<\/PRE><\/P>Das ist nicht so schlimm, aber wenn Ihre Anwendung wachsen muss, werden Sie feststellen, dass dies nach einer Weile ziemlich hässlich und schwer zu debuggen wird.<\/P><\/P>Was Sie stattdessen tun könnten<\/STRONG><\/SPAN><\/P>Hier kommt dojo\/topic ins Spiel. Jedes Widget kann dojo\/topic verwenden, um sich auf bestimmte Nachrichten zu abonnieren. Das ist ähnlich wie Events, aber nicht abhängig von einzelnen dijits.<\/P><\/P>topic.subscribe('dijit-message', function(payload) { \/** etwas tun **\ });<\/PRE>Dann kann jeder dijit oder ein anderer Teil Ihrer Anwendung auf diesen Kanal veröffentlichen.<\/P><\/P>topic.publish('dijit-message', { message: 'hello' });<\/PRE><\/P>Bemerkst du die subscribe\/publish<\/EM>-Methoden? Genau, dojo\/topic<\/EM> ist ein
einfache Demo<\/A>, wie Sie dies in Ihrer Anwendung verwenden könnten.<\/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', 'Klick mich!');
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: 'Hallo von dijit1!' });
}
});
var Dijit2 = declare([_WidgetBase], {
postCreate: function() {
this.btnNode = put(this.domNode, 'button', 'Klick mich!');
this.own(on(this.btnNode, 'click', this.onClick.bind(this)),
topic.subscribe('dijit1-click', function(data) {
var oldValue = this.btnNode.innerHTML;
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.& nbsp.; }.bind(this), 1000);
. & nbsp.; }.bind(this)));
& nbsp.; },
& nbsp.; onClick: function() {
& nbsp.; & nbsp.; topic.publish('dijit2-click', { value: 'Hallo von 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 > Können Sie das Licht sehen?< / STRONG >< / SPAN >< / P >< P > Hoffentlich können Sie sehen, wie dies eine leistungsstarke Methode sein könnte, um Daten zwischen Ihren benutzerdefinierten Widgets in Ihrer Anwendung auszutauschen. Ich verwende dies ziemlich oft zur Verwaltung dessen, welche Widgets in einer Anwendung sichtbar sind. Zum Beispiel klicken Sie auf eine Schaltfläche, zeigen widget1< / EM > an, klicken auf eine andere Schaltfläche, schließen widget1< / EM > und öffnen widget2< / EM >. Ich verwende es auch, um ein Feature weiterzugeben, von dem möglicherweise andere Widgets abhängen.< / P >< P >< / P >< P > Es gibt viele kreative Möglichkeiten, wie Sie dojo/topic< / EM > in Ihrer Anwendung verwenden könnten. Dies war nur eine kurze Einführung in ein Modul, das ich täglich nützlich finde.< / P >< / BODY >< / HTML >