GWT:如何从View中触发自定义事件并由Activity使用

时间:2011-03-21 12:48:31

标签: gwt event-handling mvp uibinder

我无法在活动中收到自定义事件。谁能告诉我我错过了什么?我正在使用GWT 2.1,MVP模式和UiBinder。

以下是我写的内容示例:

假设我有MyCustomEvent类及其处理程序接口MyCustomEventHandler及其onMyCustomEvent(MyCustomEvent event)方法。

我在Activity中实现了处理程序接口:

    class MyActivity extends AbstractActivity implements MyCustomEventHandler {
    ....

      public void onMyCustomEvent(MyCustomEvent event) {
        doWhatYouKnow();

      }

      //EventBus is injected with GIN
       public void start(AcceptsOneWidget container, EventBus eventBus) {


        ...         
        eventBus.addHandler(MyEvent.TYPE, this);


    }    



}

现在,视图中的发送部分:

    public class MyWidget extends Composite {

    final PopUpPanel myPopUp;

        public MyWidget() {
             initWidget(uiBinder.createAndBindUi(this));

             myPopUp.addCloseHandler(new CloseHandler<PopupPanel>() {

            @Override
            public void onClose(CloseEvent<PopupPanel> event) {

                       MyEvent event = new MyEvent();
               fireEvent(event);

            }

        });

         }

}

不会抛出任何异常,遗憾的是onMyCustomEvent类中永远不会调用MyActivity。任何的想法?万分感谢。

2 个答案:

答案 0 :(得分:0)

@MyWidget

你可以使构造函数获取参数(eventBus) 您可以从MyActivity类传递此内容

所以当你解雇事件@MyActivity时 该动作将被执行@MyWidget

尝试这个,我认为它会起作用。

答案 1 :(得分:0)

我认为您的一条评论指向了正确的方向。我要猜测的是你有多个EventBus浮动(每个应用程序通常只应该有一个事件总线)。

首先,确保您的Gin模块中的EventBus绑定在Singleton范围内。另外,请确保这是您传递到PlaceController的事件总线,而不是您自己构建的事件总线。

另外,我不会太担心你的对象在一个地方是ResettableEventBus这个事实。我相信这只是一个由Activities / Places框架创建的对象,它只包装你给它的EventBus对象。