我有一个带有很多标签的GXT(3.0.1)TabPanel。
此TabPanel有一个开箱即用的CloseContextMenu,有2个选项:
为了对“关闭标签”事件作出反应并最终取消它们,我使用了一些BeforeCloseHandler。
我需要什么:
问题:
BeforeCloseHandler被调用多次,因为有一些标签要关闭。所以,我没有找到任何意义来区分 unique 和 large 。我也没有找到任何意思来定制这个菜单。
有人有解决方案,还是我试图解决错误的问题?
答案 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
无论如何都可以访问所有面板。