当然,这取决于您的用户界面的构建方式以及视图的连接方式。我能想到的最简单的方法是以某种方式检测页面中是否存在后退按钮并触发点击它。
在我的应用程序中需要处理的每个视图 backbutton event有一个按钮 cls = 'back' 实现了 tap 监听器负责回到上一个视图的逻辑。
backbutton
cls = 'back'
tap
关于如何实现这个逻辑:没有魔术棒。如果可以通过一个且仅一个父视图访问特定视图,则可以对其进行硬编码。否则,如果可以从多个视图到达视图,我在视图控制器的属性中保存对我来自的视图的引用,然后在后退按钮上 tap 我转向那种观点。
移动到视图的动画通常可以通过获得 Ext.Viewport.animateActiveItem(parentView, {type: 'fade'}); (但这又取决于你如何实现你的视图树)
Ext.Viewport.animateActiveItem(parentView, {type: 'fade'});
所以在我的处理程序中 backbutton 我检查了这样一个按钮 [cls=back] (但你也可以检查一下 ui 或者你想要的任何东西)我开火了 tap 事件就可以了。 此外,当我检测到我在根视图时,我问用户是否要退出应用程序,如果是,我打电话 exit() 。
[cls=back]
ui
exit()
_handleBackButtonEvent : function(e) { // First look if the current view is the mainView var item = Ext.Viewport.getActiveItem(); // If we are on mainView, quit. // Sayonara, goodbye, adios if (item.getId() === 'mainView') { navigator.notification.confirm( "Really quit?", function(option) { if (option == 1) { navigator.app.exitApp(); } }, "Confirm", "Yes,No" ); } else { // else look if the current view has a backbutton var titlebar = item.down('titlebar[docked=top]'); var backbutton = null; if (titlebar) { backbutton = titlebar.down('button[iconCls=back]'); } if (backbutton && !backbutton.isHidden() && !backbutton.isDisabled()) { backbutton.fireEvent('tap'); } else { // if not, fallback to mainView item = Ext.getCmp('mainView'); Ext.Viewport.animateActiveItem( item, {type: 'slide', direction: 'right'}); } } e.preventDefault(); }