我有一个对话框,其中包含一个按钮和一个 TabLayoutPanel。该按钮位于 TabLayoutPanel 外部。选项卡内容是单独的自定义小部件。
问题:我想通过在选项卡内容小部件之一内执行操作来响应按钮的点击。
我尝试以这种方式使用 GWT EventBus:
- 点击按钮时触发事件
- 在选项卡内添加此事件的处理程序
但问题是:如果我多次关闭/打开选项卡,事件处理程序将再次注册。单击按钮时,事件处理程序将启动多次(对于每个处理程序注册/无论打开选项卡多少次)。
由于我的对话框没有事件/位置,因此我无法使用 GWT 的 Activity.start(... EventBus eventBus)
进行自动事件注销。
一个可能的解决方案是当我离开选项卡时手动记住注册的 HandlerRegistration
(s) 和 .removeHandler()
它们。但这是一个相当丑陋的解决方案。
问题:有没有办法在对话框中取消注册事件而不记住它们?
最佳答案
没有代码很难给出具体答案,但我会这样做:
- 当弹出窗口/对话框打开时,将 ClickHandler 添加到按钮。
- 如果单击此按钮,请检查哪个选项卡是事件选项卡,并调用该选项卡中小部件上的特定方法。
getSelectedIndex()
和getWidget(index)
应该是 TabLayoutPanel 上的方法,用于确定哪个小部件是事件的。 - 弹出窗口/对话框关闭后取消注册点击处理程序。
这样,您就只有一个处理程序来删除应该是正常方式的内容,例如使用对话框的 onClose()
事件。
关于gwt - 如何在弹出窗口/对话框中取消注册 GWT 事件总线处理程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31586871/