GXT:如何自定义TabPanel关闭上下文菜单

时间:2013-05-16 15:18:13

标签: gwt gxt

我有一个带有很多标签的GXT(3.0.1)TabPanel。

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

  • 关闭此标签
  • 关闭所有其他标签

为了对“关闭标签”事件作出反应并最终取消它们,我使用了一些BeforeCloseHandler。

我需要什么:

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

问题:

BeforeCloseHandler被调用多次,因为有一些标签要关闭。所以,我没有找到任何意义来区分 unique large 。我也没有找到任何意思来定制这个菜单。

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

1 个答案:

答案 0 :(得分: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.但是在Web环境中,上下文菜单并不是一个好主意。你不能添加一个按钮可能在选项卡面板旁边并关闭除选定的一个以外的所有选项卡? TabPanel无论如何都可以访问所有面板。