2010-03-08 96 views
1

我有一個setup其中標籤預計將基於用戶從左面板樹中選擇一個項目加載。我的目標是根據用戶選擇只加載相關項目到特定的選項卡。ExtJs添加面板作爲標籤項

第一次,我能夠加入項目如下:

var tab = tabs1.getItem('Orders'); 
    tab.remove(0); 
    tab.add(pane33); 
    tab.doLayout(); 

但是,當用戶再次選擇該項目時,面板項目已被移除,並出現了錯誤的(c.getPositionEl().dom is undefined)。

錯誤是由於該項目被刪除或銷燬。似乎沒有選項可以替換選項卡項目,或刷新/重新加載面板。

如何處理?

謝謝。

回答

2

Container.remove有一個可選的第二個參數autoDestroy,這意味着被除去也永久破壞的成分(TabPanels,此默認爲)。你只是一次實例化你的子組件,所以它們在被銷燬後不再被添加。或者通過autoDestroy: false(這也可以在TabPanel級別設置),並在刪除現有組件後隱藏(然後在隨後的點擊中簡單顯示它們),或者在每次添加之前必須重新實例化它們。

+0

您的建議已接近,但問題依然存在。因爲,當我需要在任何時候只顯示一個特定的面板,而tab.hide()隱藏所有的面板,但我找不到一種方法只顯示選定的面板或網格。例如,tab.show(ProductTypesEditorGrid);顯示所有隱藏的面板。 – Natkeeran 2010-03-09 17:07:49

+0

您可以直接顯示/隱藏組件,如editorGrid.show()(如果有引用)或Ext.getCmp('component-id')。show() – 2010-03-09 18:01:10

+0

@bmoeskau,請問您可以幫忙嗎?我無法使Ext.id()正常工作。當我刪除東西時,我也無法讓autoDestroy正常工作。我讀過一些地方,我可能不得不將佈局更改爲邊界佈局以外的佈局,因爲兩次添加組件不允許使用邊框佈局。 http://stackoverflow.com/questions/18630245/extjs-4-replace-two-components-in-viewport-items-array-after-button-click – MacGyver 2013-09-17 12:43:28

0

您可以將該選擇標記爲「已選中」並檢查鼠標操作。作爲一個簡單的方法。

+0

請澄清您的建議。 – Natkeeran 2010-03-08 22:15:17

+0

保留一個布爾變量數組,你知道,它有你的樹的大小。所以如果您的項目之前已經選擇了某個操作,那麼您不會執行該加載操作。 – Halo 2010-03-08 22:20:30