Sencha Touch:如何从控制器引用标签栏项目?

Sencha Touch : how to reference tab bar item from controller?

我的应用程序由标签栏布局中的四个页面组成。一页是搜索表单,另一页是搜索结果的数据列表。我想在后台返回搜索结果的时候自动从搜索表单页面切换到列表页面。我不知道如何从控制器引用标签栏以调用 setActiveTab 方法。

我该怎么做?

标签栏布局:

Ext.define('cro.view.Main', {
    extend: 'Ext.tab.Panel',
    xtype: 'main',
    requires: [
        ....
    ],
    config: {
        tabBarPosition: 'bottom',

        items: [
            {
                title: 'Search',
                layout: 'vbox',

                items: [
                    {
                        docked: 'top',
                        xtype: 'titlebar',
                        title: 'Search'
                    },
                    {
                        xtype: 'searchview',
                        flex: 1
                    }
                ]
            },
            {
                title: 'Results',
                layout: 'vbox',

                items: [
                    {
                        docked: 'top',
                        xtype: 'titlebar',
                        title: 'Results'
                    },
                    {
                        xtype: 'list',
                        store: 'Companies',
                        itemId: 'results',
                        itemTpl: '{company_name}',
                        flex: 1
                    }
                ]
            }
        ]
    }
});

控制器:

Ext.define('cro.controller.Main', {
    extend: 'Ext.app.Controller',

    config: {
        stores: 'cro.store.Companies',

        refs: {
            mainView: 'main',
            searchForm: 'searchview',
            searchButton: '#btnSearch'
        },
        control: {
            'searchButton': {
                tap: 'onSearchBtnTap'
            }
        }
    },

    onSearchBtnTap: function() {
        Ext.getStore('Companies').getProxy().setExtraParams(this.getSearchForm().getValues());
        Ext.getStore('Companies').load();

        //This doesn't work - help!!
        var tab = Ext.getCmp('tabbar');
        tab.setActiveTab('results');
    }
});

你不应该使用 Ext.getCmp() 它是非常低效的,因为它在全球范围内执行搜索。

您已经定义了对主视图的引用:

    refs: {
        mainView: 'main',
        searchForm: 'searchview',
        searchButton: '#btnSearch'
    },

因此您应该能够使用以下代码在控制器内的任何位置引用主视图:

var main = this.getMainView();

那么您应该可以使用该引用来调用:

main.setActiveItem();