1

我有一个子演示者(添加到插槽中的父级),它在被调用eventBus时通过(在条件下)触发事件:onBind()

class ChildPresenter extends PresenterWidget<?> {

        void onBind() {

               instance = initMyInstance();

               if (instance == null) {
                        eventBus.fireEvent(new MyEvent());
               }
        }

       //...
}

在父级上,我用onBind()这样的方法处理事件:

class ParentPresenter extends Presenter<..>{

     void onBind() {

           eventBus.addHandler(MyEvent.TYPE, new MyEventHandler() {...} );
     }
}

我也在父级中尝试过这个:addRegisteredHandler(LoggedOutEvent.TYPE, this)而且 addVisibleHandler(...),我MyEventHandler在父级演示者中实现了接口,但它不处理触发的事件。

我做错了吗?我还注意到,当我将处理过程移至onReveal()我的父母演示者的方法时,它起作用了,但是两次!!

4

1 回答 1

5

很可能您有时间问题。确保在子级触发之前调用父级中的 addHandler() ,而且我认为它应该发生在单独的浏览器事件中。试试这个看看是否有帮助:

class ChildPresenter extends PresenterWidget<?> {

        void onBind() {

               instance = initMyInstance();

               if (instance == null) {
                   Scheduler.get().scheduleDeferred(new ScheduledCommand() {

                       @Override
                       public void execute() {
                            eventBus.fireEvent(new MyEvent());
                       }
                   });

               }
        }

       //...
}
于 2015-01-17T22:04:39.660 回答