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

时间:2015-01-25 21:50:43

标签: extjs sencha-touch

我的应用程序由标签栏布局中的四个页面组成。一个页面是搜索表单,另一个页面是搜索结果的数据列表。当从后端返回搜索结果时,我想自动从搜索表单页面更改为列表页面。我无法弄清楚如何从控制器引用tabbar以调用 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');
    }
});

1 个答案:

答案 0 :(得分:0)

你不应该使用Ext.getCmp(),因为它全局执行搜索效率非常低。

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

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

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

var main = this.getMainView();

然后你应该可以使用该引用来调用:

main.setActiveItem();