gwt - 如何在弹出窗口/对话框中取消注册 GWT 事件总线处理程序?

标签 gwt event-bus

我有一个对话框,其中包含一个按钮和一个 TabLayoutPanel。该按钮位于 TabLayoutPanel 外部。选项卡内容是单独的自定义小部件。

问题:我想通过在选项卡内容小部件之一内执行操作来响应按钮的点击。

我尝试以这种方式使用 GWT EventBus:

  1. 点击按钮时触发事件
  2. 在选项卡内添加此事件的处理程序

但问题是:如果我多次关闭/打开选项卡,事件处理程序将再次注册。单击按钮时,事件处理程序将启动多次(对于每个处理程序注册/无论打开选项卡多少次)。

由于我的对话框没有事件/位置,因此我无法使用 GWT 的 Activity.start(... EventBus eventBus) 进行自动事件注销。

一个可能的解决方案是当我离开选项卡时手动记住注册的 HandlerRegistration(s) 和 .removeHandler() 它们。但这是一个相当丑陋的解决方案。

问题:有没有办法在对话框中取消注册事件而不记住它们?

最佳答案

没有代码很难给出具体答案,但我会这样做:

  1. 当弹出窗口/对话框打开时,将 ClickHandler 添加到按钮。
  2. 如果单击此按钮,请检查哪个选项卡是事件选项卡,并调用该选项卡中小部件上的特定方法。 getSelectedIndex()getWidget(index) 应该是 TabLayoutPanel 上的方法,用于确定哪个小部件是事件的。
  3. 弹出窗口/对话框关闭后取消注册点击处理程序。

这样,您就只有一个处理程序来删除应该是正常方式的内容,例如使用对话框的 onClose() 事件。

关于gwt - 如何在弹出窗口/对话框中取消注册 GWT 事件总线处理程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31586871/

相关文章:

websocket - Vertx SocketJS 在服务器繁忙几秒钟后断开连接

java - GWT SimplePager : How to provide GoTo Functionality in pager?

gwt - GWT 中的 TreeItem ClickHandler

java - EventBus 粘性事件是否在订阅者方法上自动删除?

android - Android 中的 Fragment 回调与 EventBus

java - 使用 Vert.x 事件总线 'locally'(java,单个 jvm)时是否可以避免序列化?

javascript - 带有组合 API 的 Vue 3 事件总线

java - 检测 GWT 中的离线和在线状态

css - 为什么 Anchor 仍然使用默认的 css,即使我设置了不同的样式 (GWT)?

java - 解析复杂的 JSON 文件