【问题标题】:My fired GWT event is not handled by the parent presenter父演示者未处理我触发的 GWT 事件
【发布时间】:2015-01-17 21:56:43
【问题描述】:

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

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() 方法时,它起作用了,但是两次!!

【问题讨论】:

  • 你想通过onBind方法实现什么?该方法在初始化presenter时只调用一次,不会调用。
  • 应在 onBind() 方法中添加处理程序。这是一个时间问题。子 Presenter 在父级为其添加 Handler 之前触发了该事件。

标签: gwt gwtp gwt-platform event-bus


【解决方案1】:

您很可能遇到时间问题。确保在子级触发之前调用父级中的 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());
                       }
                   });

               }
        }

       //...
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-08
    • 2011-02-27
    • 1970-01-01
    • 2012-04-15
    • 2011-09-07
    • 1970-01-01
    • 2012-10-21
    • 1970-01-01
    相关资源
    最近更新 更多