如何在 extjs 中重新添加已删除的选项卡

Posted

技术标签:

【中文标题】如何在 extjs 中重新添加已删除的选项卡【英文标题】:How to re-add a removed tab in extjs 【发布时间】:2013-07-20 22:27:06 【问题描述】:

我想添加/删除一个标签。

我知道添加/删除方法。但我的问题是我想再次重新添加相同的选项卡。重新添加的选项卡存储在内存中。我希望能够做这样的事情:

function addMyTab(tab) 
    var me = this;
    if (!tab)  // use most recently added tab
        tab = me.tab;
     else  // update most recently added tab
        me.tab = tab;
    

    var tabPanel = Ext.ComponentQuery.query(..);
    tabPanel.removeAll();
    tabPanel.add(me.tab);

但这不起作用,它会引发此错误:

未捕获的类型错误:无法读取 null 的属性“addCls”

Extjs forum thread 建议这是由于尝试添加已销毁的元素。

如何重复使用标签?

【问题讨论】:

这里的tab 是什么,你确定它是你打电话给tabPanel.add 时的想法吗? @ChrisFarmer 选项卡是 Ext.panel.Panel。没有理由改变它,至少在我的代码中。 您是否尝试过将removeautoDestroy 参数专门设置为false?当然,您并没有真正尝试重新添加实际的面板,因为如果这是真的,您就不会收到该错误,对吧? 真正令人困惑的问题,需要更多代码。 @ChrisFarmer 将autoDestroy 设置为false 成功了。谢谢!如果您想添加答案。 【参考方案1】:

由于您似乎在说要重新添加要删除的同一个面板,我猜测该面板在删除步骤后被销毁。我认为这样的事情应该可行:

// initially add the panel
tabPanel.add(myPanel);

// remove it with autoDestroy set to false so Ext doesn't kill your panel
tabPanel.removeAll(false); 

// re-add the panel
tabPanel.add(myPanel);

【讨论】:

@Is7aq 确保在不会重复使用的标签上调用 Ext.destroy()【参考方案2】:

试试这样的:

var currentTab = null;
function addMyTab(tab) 
    var me = this;
    if (tab)  // use most recently added tab
        currentTab = tab;
     
    var tabPanel = Ext.ComponentQuery.query(..);
    tabPanel.removeAll();
    tabPanel.add(currentTab );

currentTab 是一个全局变量。如果传递一个新选项卡来更新当前选项卡,请将当前选项卡替换为新选项卡 it ,否则按原样使用当前选项卡。确保在第一次使用 currentTab 之前,使用一些选项卡对其进行初始化。

【讨论】:

以上是关于如何在 extjs 中重新添加已删除的选项卡的主要内容,如果未能解决你的问题,请参考以下文章

如何将 extjs Carousel 用于选项卡项

在 QTabWidget (PyQT) 中添加已删除的选项卡

如何从 Ext js 中的选项卡中删除活动选项卡?

如何在 ExtJs 中单击 TabPanel 中的 Tab 菜单时初始化各个选项卡数据?

如何从 Woocommerce 的“我的帐户”中删除“Paypal 付款”选项卡

php 删除/重命名/重新排序/自定义/添加产品数据选项卡