将选项卡动态添加到选项卡栏时,选项卡面板行为会中断

时间:2012-12-30 04:39:26

标签: sencha-touch sencha-touch-2

我尝试将this.callParent(arguments)添加到选项卡面板的initialize事件中 正如http://www.sencha.com/forum/showthread.php?234909-tab-panel-doesn-t-switch-between-tabs-when-added-dynamically所建议的那样,但我得到了:

Uncaught Error: this.callParent() was called but there's no such method (doFire) found in the parent class (Ext.Base).

有人能指出我正确的方向吗?

谢谢。

我的控制器如下:

Ext.define('MyApp.controller.MyController', {
    extend: 'Ext.app.Controller',

    config: {
        refs: {
            mytabpanel: '#mytabpanel'
        }
    },

    init: function(application) {

        this.control({
            mytabpanel: {
                initialize: function(component, options){
                    var bar = component.getTabBar();

                    bar.insert(0, { flex:1, xtype:'toolbar', title: '' });

                    bar.insert(bar.getItems().length, 
                    {
                        xtype: 'toolbar',
                        flex: 1,
                        title: '',
                        items: [
                        {
                            xtype : 'button',
                            docked: 'right',
                            ui: 'round',
                            iconCls: 'info',
                            iconMask: true,
                            handler: function(){                       
                            }
                        }
                        ]
                    });
                    this.callParent(arguments);
                }
            }
        });
    }
});

我的观点如下:

Ext.define('MyApp.view.MyTabPanel', {
    extend: 'Ext.tab.Panel',

    config: {
        id: 'mytabpanel',
        items: [
            {
                xtype: 'container',
                title: 'Tab 1',
                iconCls: 'info',
                html: 'tab 1'
            },
            {
                xtype: 'container',
                title: 'Tab 2',
                iconCls: 'info',
                html: 'tab 2'
            },
            {
                xtype: 'container',
                title: 'Tab 3',
                iconCls: 'info',
                html: 'tab 3'
            }
        ],
        tabBar: {
            docked: 'bottom'
        }
    }
});

编辑12月30日星期日上午6:57(北京时间 - 4:00)

从搜索网络我现在相信因为我重写初始化然后我需要调用超类'initialize方法,以便它的代码也将被执行。正如user1479606所指出的,调用this.callParent永远不会有效。因此,问题变成:如何调用超类的初始化方法?

1 个答案:

答案 0 :(得分:0)

我认为您的应用程序不适用于您的情况,因为您应该在视图中使用this.callParent(arguments)而不是您的控制器,否则您的父类将永远是Ext.Base

为了更容易理解和更好的方法,为什么不按照这样的Sencha Touch 2惯例:

config: {
    refs: {
        mytabpanel: '#mytabpanel'
    }

    control: {
        mytabpanel: {
            initialize: 'domytabpanel'
        }
    }
},

domytabpanel: function(component, options) {
    var bar = component.getTabBar();

    bar.insert(0, {
        flex:1, 
        xtype:'toolbar', 
        title: ''
    });

    bar.insert(bar.getItems().length, 
    {
        xtype: 'toolbar',
        flex: 1,
        title: '',
        items: [
        {
            xtype : 'button',
            docked: 'right',
            ui: 'round',
            iconCls: 'info',
            iconMask: true,
            handler: function(){                       
            }
        }
        ]
    });
}

希望有所帮助:)