0

我有一个带有许多选项卡的 GXT(3.0.1) TabPanel。

这个 TabPanel 有一个开箱即用的 CloseContextMenu,有 2 个选项:

  • 关闭此选项卡
  • 关闭所有其他选项卡

为了对“关闭选项卡”事件做出反应并最终取消它们,我使用了一些 BeforeCloseHandler。

我需要的 :

  • 当用户关闭一个选项卡时,能够显示此选项卡的确认对话框。
  • 当用户选择关闭所有其他选项卡时,为所有选项卡显示一个唯一确认。

问题 :

BeforeCloseHandler 被调用的次数与要关闭的选项卡一样多。因此,我没有找到任何方法来区分独特关闭和大规模关闭。我也找不到任何自定义此菜单的方法。

有人有解决方案还是我试图解决错误的问题?

4

1 回答 1

0

我认为 Sencha 没有为这个问题提供更清洁的解决方案。是的,正如您所说,如果您看到实现,BeforeCloseEvent每个选项卡关闭都会触发,因此您会获得事件列表。但是有一个解决方案。

1.如果您检查他们如何在 TabPanel 实现中创建 closeContextMenu,您可以看到。

closeContextMenu.add(new MenuItem(getMessages().closeOtherTabs(), new SelectionHandler<MenuItem>() {
          @Override
          public void onSelection(SelectionEvent<MenuItem> event) {
            List<Widget> widgets = new ArrayList<Widget>();
            for (int i = 0, len = getWidgetCount(); i < len; i++) {
              widgets.add(getWidget(i));
            }

            for (Widget w : widgets) {
              TabItemConfig config = getConfig(w);
              if (w != contextMenuItem && config.isClosable()) {
                close(w);
              }
            }
          }

        }));

并且也是closeContextMenu受保护的,因此如果您扩展此类TabPanel,您可以设置自己的菜单而不是使用默认菜单。然后,您可以添加自己SelectionHandler的信息并向用户提供相关信息。例如,在上面的代码中,您可以在运行删除选项卡的 for 循环之前显示提示消息。

2.然而,上下文菜单在网络环境中并不是一个好主意。您不能在选项卡面板旁边添加一个按钮并关闭除选定选项卡以外的所有选项卡吗?TabPanel无论如何都可以访问所有面板。

于 2013-05-16T16:33:14.157 回答