我不知道,如果你发现任何回答这个问题或解决它通过你自己的,因为问题是很老。但是我尝试了你想做的事情,并且我成功地获得了结果。所以这是代码。我严格遵循MVC,以便发布需要此功能的必要文件。基本上,视图和控制器。
Main.js含有的TabPanel
Ext.define('SO.view.Main', {
extend: 'Ext.tab.Panel',
xtype: 'main',
requires: [
'Ext.TitleBar',
'Ext.Video'
],
config: {
tabBarPosition: 'bottom',
items: [
{
title: 'Welcome',
iconCls: 'home',
styleHtmlContent: true,
scrollable: true,
html: [
"You've just generated a new Sencha Touch 2 project. What you're looking at right now is the ",
].join("")
},
{
title: 'Get Started',
iconCls: 'action',
items: [
{
xtype: 'button',
text: 'Push a new view!',
action:'push_new_view'
}
]
}
]
}
});具有导航视图和默认项作为标签面板上述
Ext.define('SO.view.Nav', {
extend: 'Ext.NavigationView',
xtype: 'nav',
config:{
fullscreen: true,
items: [
{
title: 'Default View',
xtype:'main'
}
]
}
})
Nav.js;
最后,控制器。我在控制器中处理了每个用户交互操作。
Ext.define('SO.controller.Nav',{
extend:'Ext.app.Controller',
config:{
refs:{
views:['SO.view.Main','SO.view.Nav'],
navView:'nav',
tabView:'main'
},
control:{
tabView:{
activeitemchange:'changeTitle'
},
'button[action=push_new_view]':{
tap:'pushNewView'
}
}
},
changeTitle:function(container,value,oldValue,eOpts){
console.log(value.title);
this.getNavView().getNavigationBar().setTitle(value.title);
},
pushNewView:function(){
var activeTabTitle = this.getTabView().getActiveItem().title;
var controller = this;
controller.getNavView().push({
title: 'Second',
html: 'Second view!'
});
controller.getNavView().getNavigationBar().getBackButton().setText(activeTabTitle);
controller.getNavView().getNavigationBar().getBackButton().on('tap',function(self){
controller.getNavView().getNavigationBar().setTitle(activeTabTitle);
});
}
}
);
如您所见,我已附加了根据changeTitle
函数中的选定选项卡更改标题的函数。
功能pushNewView
推动新的视图,让我们你ovverride返回按钮的行为。我所做的只是简单地从标签面板拿到activeItem()
,它包含一个推动新视图的按钮。一旦我们获得了activeItem,我们可以得到它的标题,该标题需要设置为backButtnoText
。所以我遍历导航视图和getBackButton实例,并简单地通过调用setText()
方法改变了后退按钮文本。
同时,我已将事件处理程序附加到后退按钮,因为我们希望将导航栏标题更改为以前的标题。所以有一次,使用轻按按钮,我们将标题设置为我们在上述步骤中获得的标题。一旦你完成了任务,你可能会想要分离事件处理程序,因为它可能会导致问题,或者我宁愿说它会很好。
只是试试这个,它只是工作。
感谢您的答案 - 我会在今天晚些时候尝试。 – Brett 2013-03-13 01:11:04
非常好,我得到了这个工作。唯一的区别是我不得不使用“value.tab.getTitle()”而不是“value.title” - 任何想法为什么?我正在使用版本2.1.0 – Brett 2013-03-13 05:15:21
@Brett好吧,我也使用2.1,都给了我相同的结果。当使用'value.title'时你会出错吗? – SachinGutte 2013-03-13 06:21:50