我做了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
属性,则您将无法停用此选项卡。那么,我们如何解决这一切呢?
答案 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需要在渲染之后。