【问题标题】:ExtJs add panel as tab itemExtJs 添加面板作为选项卡项
【发布时间】:2010-03-08 22:01:39
【问题描述】:

我有一个setup,预计将根据用户从左侧面板树中选择项目来加载选项卡。我的目标是根据用户选择仅将相关项目加载到特定选项卡。

第一次,我可以添加如下项目:

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

但是,当用户再次选择该项目时,面板项目已被删除,并且错误输出为 (c.getPositionEl().dom is undefined)。

错误是由于项目被移除或销毁所致。似乎没有替换选项卡项或刷新/重新加载面板的选项。

如何处理?

谢谢。

【问题讨论】:

    标签: javascript user-interface extjs tabs


    【解决方案1】:

    Container.remove 有一个可选的第二个参数autoDestroy,这意味着被移除的组件也会被永久销毁(对于 TabPanel,默认为 true)。您只实例化您的子组件一次,因此在它们被销毁后,它们不再可用于添加。要么通过autoDestroy: false(也可以在 TabPanel 级别设置)并在移除现有组件后隐藏它们(然后在后续单击时简单地显示它们),或者您必须在每次添加之前重新实例化它们。

    【讨论】:

    • 您的建议很接近,但问题仍然存在。因为,当我需要在任何时候只显示一个特定的面板时,tab.hide() 隐藏了所有的面板,但是我找不到只显示选定的面板或网格的方法。例如,tab.show(ProductTypesEditorGrid);显示所有隐藏的面板。
    • 你可以直接显示/隐藏组件,比如 editorGrid.show() 如果你有引用,或者 Ext.getCmp('component-id').show()
    • @bmoeskau,你能帮忙解决这个问题吗?我无法让 Ext.id() 工作。当我删除东西时,我也没有成功让 autoDestroy 工作。我在某处读到我可能不得不将布局更改为边框布局以外的其他内容,因为边框布局不允许添加两次组件。 stackoverflow.com/questions/18630245/…
    【解决方案2】:

    您可以将该选择标记为“已选择”并检查鼠标操作。作为一种简单的方法。

    【讨论】:

    • 请澄清您的建议。
    • 保存一个布尔变量数组,你知道,它有你的树的大小。因此,如果您的项目之前已被选中,则当某个操作发生时,您不会执行该加载操作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多