如何在GWT中创建子/模块特定的事件总线。

时间:2016-05-24 04:56:09

标签: java events gwt event-handling event-bus

我正在使用GWT项目,并且有一种情况我想为具有相同项目的不同模块创建单独的事件总线。 GWT为整个项目提供单一事件总线,我们可以使用它来连接模块。现在,我不想使用相同的事件总线,并且想要一个模块特定的事件总线,它只能处理与该模块相关的事件。    是否有机制来实现这种情况。 GWT是否允许我们在同一个项目中创建多个事件总线。如果是,那么如何实施和使用。?

2 个答案:

答案 0 :(得分:0)

虽然看起来好主意,但拥有多个EventBus会增加项目的复杂性。正如您可能意识到JavaScript是单线程的,无论您在GWT中编写的Java代码是什么,都将转换为JavaScript。因此,拥有Multiple EventBus不会带来任何好处。

One Vs N EventBus

如果你找时间阅读this。这可能很有趣。

答案 1 :(得分:0)

如果配置了gin,您可以通过以下步骤使用杜松子酒注射实现此目的

<强> 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;
}