【发布时间】:2016-03-21 22:08:37
【问题描述】:
我目前正在从事一个 GWT 项目。我有一个在多个页面之间共享的公共块。我在该公共块上有一些操作按钮,并且页面有一个处理程序,用于在单击这些操作按钮时启动的事件。
我面临的问题是,当我单击页面 A 上的其中一个操作按钮时,页面 B 中预先注册的处理程序也会被调用。
所以我想到的解决方案是在我们离开页面时从页面中删除处理程序,这样一次只有一个页面具有注册处理程序来处理相同的操作按钮事件。
首先,我注册到动作按钮点击事件并保存从addHandler方法返回的HandlerRegistration对象:
HandlerRegistration actionButtonClickEventHandlerRegistration=eventBus.addHandler(CommonBlockActionButtonClickedEvent.TYPE, someHandler);
然后,在页面更改事件中,我从之前保存的 HandlerRegistration 对象中调用 removeHandler
eventBus.addHandler(PageChangeEvent.TYPE, new PageChangeEventHandler() {
@Override
public void onMainPageChange(PageChangeEvent event) {
actionButtonClickEventHandlerRegistration.removeHandler();
}
});
所以我在每个页面上都这样做,除了当我启动我的应用程序并转到其中两个页面时,我收到此错误:
Caused by: java.lang.AssertionError: redundant remove call
你们知道我为什么会收到此错误或其他解决问题的方法吗?
非常感谢!
【问题讨论】:
标签: gwt event-handling