SimpleEventBus предоставляет базовые функциональные возможности хранения коллекции обработчиков и, при необходимости, вызова event.dispatch () со всеми соответствующими обработчиками. Я бы не сказал, что вы «устанавливаете EventBus для прослушивания событий» из родительского виджета. SimpleEventBus не имеет понятия «родитель». Вместо этого вы передаете ссылку на ваш SimpleEventBus. Затем любой объект может «инициировать событие» с помощью метода SimpleEventBus.fireEvent. Там нет иерархии.
Аналогично, любой объект может прослушивать эти события с помощью SimpleEventBus.addHandler (). Это ближе всего к вашему # 4 - addHandler принимает тип события и обработчик, поэтому всякий раз, когда этот тип события передается в fireEvent
(чем-то в вашем приложении), этот обработчик передается в событие. Обратите внимание, что Event
- это то, что вызывает обработчик, а не EventBus! EventBus просто вызывает event.dispatch (theHandler), и программист события отвечает за вызов соответствующей функции в theHandler. Ваш # 5 неточен, по крайней мере для SimpleEventBus - SimpleEventBus вообще не проверяет события, кроме как посмотреть, какие обработчики вызывать. Он не знает ни о дочерних виджетах, ни о какой-либо логике приложения и никогда не меняет тип события.
Ваша логика о том, какой регион выбран, не будет подходящей в EventBus - вместо этого вы создадите обработчик, который выполняет логику и прослушивает ClickEvents. Затем этот обработчик может сообщить выбранному региону, что он был выбран напрямую, или вы можете создать свой собственный RegionSelectionEvent, который вы можете запустить вдоль EventBus, и тогда все регионы могут быть проинформированы о том, что произошло RegionSelection, и ваш регистратор может получить уведомление или монитор вашего сервера может получить уведомление и уведомить начальника о том, что кто-то выбрал регион или что-то еще. Если вам просто нужно отменить выбор одного региона и выбрать другой, шина событий является излишней.
С другой стороны, что-то вроде события «resize» имеет большой смысл, так как все ваши виджеты, возможно, должны знать об этом.