在setActiveItem上消失了TabPanel卡?

时间:2011-07-15 17:39:03

标签: javascript sencha-touch extjs

修改

我有一个扩展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和它的轮播都以某种方式被实例化了两次,所以这可能是问题的一个重要部分......

1 个答案:

答案 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)。