无法关闭可关闭的标签并激活标签

时间:2017-06-09 21:15:14

标签: javascript extjs

我做了fiddle来证明这些问题。第一个问题是无法关闭TabBar中的可关闭选项卡。代码很简单:

Ext.create("Ext.tab.Bar",{
   renderTo: "one",
   items:[{"text":"One","closable":true},{"text":"Two","closable":true}]
}); 

文档说,

  

closable:Boolean bindable

     

为True以使Tab可关闭并显示关闭图标

因此,此属性不仅关于此关闭图标,还关于要关闭此行为。

我面临的第二个问题是,无法通过标签栏激活添加到标签面板的标签。代码也很简单:

Ext.create("Ext.tab.Panel",{
    renderTo: "two",
    id: "test2",
    items:[{"title":"One","closable":true},{"title":"Two","closable":true}],
    listeners: {
        render: function () {
            this.getTabBar().add({"text":"Three"});
        }
    }
});

尝试激活此最后一个标签,您将失败。如果您在此选项卡上设置active属性,则您将无法停用此选项卡。那么,我们如何解决这一切呢?

2 个答案:

答案 0 :(得分:2)

  

TabBar由Ext.tab.Panel内部使用,通常不应该使用   需要手动创建。

tabbar的实现依赖于它是tabpanel的一部分。如果我们深入研究它的源代码,我们会在“closeTab”方法实现中看到它是否存在要关闭的基础卡:

public static void main(String[] args) {
    int search, counter;
    int num[]={3, 4, 5, 6, 7, 8, 10, 7,  9, 13};
    boolean wasFound = false;

    System.out.print("Array: ");
    for (int count=0; count<num.length; count++)
        System.out.print(+num[count] + " ");

    Scanner in = new Scanner (System.in);
    System.out.print("\nValue to find: ");
    search = in.nextInt();

    for (counter = 0; counter < num.length; counter++ ){
        if (num[counter] == search)
        {
            System.out.println(search + " is in slot " + (counter + 1) + ".");
            wasFound = true;
        }
    }
    if (!wasFound)
    {
        System.out.println(search + " is not in the array.");
    }
}

与第二种行为相关,如果您将在tabbar源代码中查看“doActivateTab”方法实现,您将会看到:

if (tabPanel && card) {...

因此,如果没有tabpanel,它只会激活标签,如果有,它会调用tabpanel的“setActiveTab”,如果它没有找到附在标签上的卡片,那么被激活,激活上一个标签。

您不应直接添加到标签栏,而是添加到标签面板:

doActivateTab: function(tab) {
    var tabPanel = this.tabPanel;

    if (tabPanel) {
        // TabPanel will call setActiveTab of the TabBar 
        if (!tab.disabled) {
            tabPanel.setActiveTab(tab.card);
        }
    } else {
        this.setActiveTab(tab);
    }
}

答案 1 :(得分:0)

这是一个有效的fiddle。似乎setactivetab需要在渲染之后。