2013-05-16 42 views
0

我有一個帶有很多選項卡的GXT(3.0.1)TabPanel。GXT:如何自定義TabPanel關閉上下文菜單

此的TabPanel有一個徹頭徹尾的現成CloseContextMenu有2種選擇:

  • 關閉此選項卡
  • 關閉所有其他選項卡

爲了應對「關閉標籤「事件並能夠最終取消它們,我使用了一些BeforeCloseHandler。

我需要什麼:

  • 當用戶關閉一個標籤,能夠爲這個選項卡中顯示一個確認對話框。
  • 當用戶選擇關閉所有其他選項卡時,顯示所有選項卡的唯一確認。

問題:

,因爲有一些選項卡關閉的BeforeCloseHandler被稱爲多次。所以,我沒有發現任何意思,使獨特大量關閉。我也沒有發現任何意思來定製這個菜單。

有沒有人有解決方案或我想解決錯誤的問題?

回答

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都可以訪問所有面板。