ExtJS TabPanel SetActiveTab恢复为0

时间:2015-04-22 15:51:26

标签: extjs extjs-mvc

我有一个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);
}
}

2 个答案:

答案 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,所以它基本上被解雇了两次......这意味着你的程序化方式首先被调用,所以它正在失败。