2010-03-08 75 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