监听选项卡项目在Sencha中单击

时间:2012-11-01 13:47:59

标签: sencha-touch-2 listener tabpanel

在我的应用程序中,我使用了一个包含5个项目的选项卡面板。每个项目在卡片布局中添加了大约6个面板。当我在选项卡项目的最后一个面板中时,我需要通过单击底部选项卡面板(有点类似于iOS中的普通选项卡视图控制器)返回到初始面板。我遇到了some solutions I found here,但它似乎只有在我在标签之间切换时才有效。实际上我想在同一个标​​签图标上听点击事件。我怎么能这样做?

2 个答案:

答案 0 :(得分:5)

我已经解决了你的问题。我认为这正是你想要的。希望这可以帮助。如果不是这样,请发表评论。

1)。 查看(MyTabPanel1.js)

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

            scrollable: 'vertical',
             items:
            [
                {
                   xtype: 'panel',
                   id:'cardpanel1',
                   title: 'Tab1',              
                   layout: 'card',
                        items: [
                            {  
                                html: "First Item",
                                items:
                                [
                                {
                                    xtype: 'button',
                                    text: 'Forward',
                                    handler: function() {
                                    Ext.getCmp('cardpanel1').setActiveItem(1);
                                    console.log('Going to Second Item');
                                    }
                                }
                                ]
                            },
                            {
                                html: "Second Item",
                                items:
                                [
                                {
                                    xtype: 'button',
                                    ui: 'confirm',
                                    text: 'Go back',
                                    handler: function() {
                                    Ext.getCmp('cardpanel1').setActiveItem(0);
                                    console.log('Going to First Item');
                                    }
                                }
                                ]
                            }

                        ]               

                },

                {
                    xtype: 'panel',
                    title: 'Tab2',
                    scrollable: true,
                    items: [
                        {
                            xtype: 'button',
                            margin: 10,
                            ui: 'action',
                            text: 'Tab2'
                        }

                    ]
                },
                {
                    xtype: 'panel',
                    title: 'Tab3',
                    scrollable: true,
                    items: [
                        {
                            xtype: 'button',
                            margin: 10,
                            ui: 'action',
                            text: 'Tab3'
                        }
                    ]
                }

            ]
        }

    });

2)。 控制器(MainController.js)

    Ext.define('MyApp.controller.MainController', {
        extend: 'Ext.app.Controller',
        config: {
            control: {

                "tabpanel #ext-tab-1":{  //ext-tab-1 is the id for the 1st tab generated by Sencha
                   tap: 'ontap'
                }            
            }
        },

        ontap: function (){
        console.log('inside controller');
        Ext.getCmp('cardpanel1').setActiveItem(0);
        }

    });

答案 1 :(得分:2)

我会提供一个更简单的解决方案

这是我的名为Viewport的视图,它是一个TabPanel:

Ext.define('Sencha.view.iphone.Viewport',{
           extend: 'Ext.TabPanel',
           xtype: 'newviewport',
           alias: 'widget.newTabPanel',

现在在我的控制器文件中:

    Ext.define('Sencha.controller.iphone.main', {
        extend: 'Ext.app.Controller',
        config:
        {
        refs: {
        theMainTabPanelTabbarTab: 'newTabPanel > tabbar > tab', //this the tab of the tabpanel, if we listen to it that way we will know of tab panel tap.
        },
        control: {
        theMainTabPanelTabbarTab:{
        tap: 'onTapMainTabPanel'
        }
}

这是一个有效的代码,工作正常。希望这对你有帮助。