我的应用程序由标签栏布局中的四个页面组成。一个页面是搜索表单,另一个页面是搜索结果的数据列表。当从后端返回搜索结果时,我想自动从搜索表单页面更改为列表页面。我无法弄清楚如何从控制器引用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');
}
});
答案 0 :(得分:0)
你不应该使用Ext.getCmp(),因为它全局执行搜索效率非常低。
您已经定义了对主视图的引用:
refs: {
mainView: 'main',
searchForm: 'searchview',
searchButton: '#btnSearch'
},
因此您应该能够使用以下代码在控制器内的任何位置引用主视图:
var main = this.getMainView();
然后你应该可以使用该引用来调用:
main.setActiveItem();