我有一个tabpanel,您可以在其中单击按钮以创建新标签。单击该按钮时,它会创建新选项卡,但是当我调用setActiveTab时,它似乎什么都不做。当我在Chrome中逐步浏览它时,我可以看到它实际上是将标签更改为指定的标签,然后将其切换回原始标签。任何帮助都会很棒。这是代码:
标签控件:
{
xtype:'tabpanel',
itemId:'tabctr1',
width:785,
hidden:true,
items:[
{ iconCls: 'btn-NewTab', tabConfig: { listeners: { click: btnAddSensor_Click } } }
]
}
点击活动:
function btnAddSensor_Click(sender,e,eOpts)
{
//Local Variable Declaration
var parent = sender.up('tabpanel');
if (parent !== null && parent !== undefined)
{
var newTab = parent.add({
title: parent.items.length,
layout: 'vbox',
width:785,
margin:'5 0 0 0',
items:[
]
}
]
});
parent.setActiveTab(newTab);
}
}
答案 0 :(得分:0)
它似乎是一个时间问题,我能够解决使用:
Ext.Function.defer(function(p){ p.setActiveTab((parent.items.getCount()-1)); }, 1000, this, [parent]);
答案 1 :(得分:0)
问题是你的第一个标签本质上是一个按钮......我不确定为什么会出现这个问题,但是如果你把它设置为一个按钮就可以了。看看我的Fiddle。和相应的代码:
var parent = Ext.create('Ext.tab.Panel', {
width: 785,
height: 400,
buttons: [{
text: 'Add Tab',
listeners: {
click: btnAddSensor_Click
}
}]
});
function btnAddSensor_Click(sender,e,eOpts) {
if (parent !== null && parent !== undefined) {
var newTab = parent.add({
title: parent.items.length,
layout: 'vbox',
margin:'5 0 0 0',
items: [{
xtype: 'button',
text: 'hello ' + parent.items.length
}]
});
parent.setActiveTab(newTab);
}
}
我想我刚刚意识到为什么会出现这个问题...当你点击你的标签添加一个新标签时,Ext想要确保点击的标签被设置,所以它正在触发setActiveTab
,但是你也在你的点击功能中调用setActiveTab
,所以它基本上被解雇了两次......这意味着你的程序化方式首先被调用,所以它正在失败。