修改
我有一个扩展TabPanel的视口。在其中,我设置了一个tabBar按钮来加载另一个名为subTabPanel的TabPanel。 myApp.views.viewport.setActiveItem(index, options)
工作得很好。但是myApp.views.subTabPanel.setActiveItem(index, options)
只会在消失之前暂时加载适当的面板卡。
奇怪的是,从subTabPanel的列表项中调用它可以正常工作:
this.ownerCt.setActiveItem(index, options)
但是,我想避免这种情况,因为我希望这些操作能够存在于控制器中以便遵守MVC。
有关卡从控制器调用时消失的原因的任何想法,但是从包含的subTabPanel调用时却没有?
(有问题的subTabPanel卡是Ext.Carousel的扩展名。)
的更新
看起来subTabPanel和它的轮播都以某种方式被实例化了两次,所以这可能是问题的一个重要部分......
答案 0 :(得分:1)
本案的答案是防止重复创建subTabPanel及其轮播。
视口现在看起来像这样:
myApp.views.Viewport = Ext.extend(Ext.TabPanel, {
fullscreen: true,
layout: 'card',
cardSwitchAnimation: 'slide',
listeners: {
beforecardswitch: function(cnt, newCard, oldCard, index, animated) {
//alert('switching cards...');
}
},
tabBar: {
ui: 'blue',
dock: 'bottom',
layout: { pack: 'center' }
},
items: [],
initComponent: function() {
//put instances of cards into myApp.views namespace
Ext.apply(myApp.views, {
subTabPanel: new myApp.views.SubTabPanel(),
tab2: new myApp.views.Tab2(),
tab3: new myApp.views.Tab3(),
});
//put instances of cards into viewport
Ext.apply(this, {
items: [
myApp.views.productList,
myApp.views.tab2,
myApp.views.tab3
]
});
myApp.views.Viewport.superclass.initComponent.apply(this, arguments);
}
});
我已经从items:
属性中删除了那些TabPanel项的重复创建,并将其tabBar特定的属性移动到视图类SubTabPanel,Tab2和Tab3(每个都是Ext的扩展名)。 TabPanel或Ext.Panel)。