我不認爲這個問題有一個由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
都可以訪問所有面板。