我正在使用GWT项目,并且有一种情况我想为具有相同项目的不同模块创建单独的事件总线。 GWT为整个项目提供单一事件总线,我们可以使用它来连接模块。现在,我不想使用相同的事件总线,并且想要一个模块特定的事件总线,它只能处理与该模块相关的事件。 是否有机制来实现这种情况。 GWT是否允许我们在同一个项目中创建多个事件总线。如果是,那么如何实施和使用。?
答案 0 :(得分:0)
虽然看起来好主意,但拥有多个EventBus会增加项目的复杂性。正如您可能意识到JavaScript是单线程的,无论您在GWT中编写的Java代码是什么,都将转换为JavaScript。因此,拥有Multiple EventBus不会带来任何好处。
如果你找时间阅读this。这可能很有趣。
答案 1 :(得分:0)
<强> 1。创建事件总线为:
public interface EventBusOne extends EventBusWithLookup {}
public interface EventBusTwo extends EventBusWithLookup {}
<强> 2。将为gwt app创建的gin模块中的两个总线绑定为:
bind(EventBusWithLookup.class).annotatedWith(Names.named("EventBusOne")).toProvider(EventBusOneProvider.class).in(Singleton.class);
bind(EventBusWithLookup.class).annotatedWith(Names.named("EventBusTwo")).toProvider(EventBusTwoProvider.class).in(Singleton.class);
第3。创建自定义提供商:
public class EventBusOneProvider implements Provider<EventBusWithLookup> {
@Override
public EventBusWithLookup get() {
return GWT.create(EventBusWithLookup.class);
}
}
public class EventBusTwoProvider implements Provider<EventBusWithLookup> {
@Override
public EventBusWithLookup get() {
return GWT.create(EventBusWithLookup.class);
}
}
<强> 4。在演示者或任何需要的地方注入事件总线:
@Inject
public void setEventBus(@Named("EventBusOne") Provider<EventBusWithLookup> eventBus) {
this.eventBus = eventBus;
}
@Inject
public void setEventBus(@Named("EventBusTwo") Provider<EventBusWithLookup> eventBus) {
this.eventBus = eventBus;
}