我认为 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
无论如何都可以访问所有面板。