10

在 Sencha 触摸中,如果我使用导航视图,我可以获得返回按钮。这很好。

但是如果用户点击设备后退键怎么办?它是直接退出应用程序。在我的要求中,它不应该退出它必须返回上一个屏幕的应用程序。我该怎么做?

4

2 回答 2

8

您可以像这样处理硬件后退按钮:

if (Ext.os.is('Android')) {
    document.addEventListener("backbutton", Ext.bind(onBackKeyDown, this), false);

    function onBackKeyDown(eve) {

        eve.preventDefault();

        //do something
        alert('back button pressed');

    }
}
于 2013-09-25T23:34:01.570 回答
6

尝试执行此操作时,我没有在历史支持页面上找到有用的说明;在处理导航视图时,我无论如何都看不到使用路线,该导航视图可以随时在其上拥有大量视图。

但是,如果您只是希望后退按钮起作用,则可以使用popstateandpushstate函数(请参阅https://developer.mozilla.org/en-US/docs/DOM/Manipulating_the_browser_history以获取参考)。这个想法是,您push在添加视图时处于状态,而pop在删除视图时处于关闭状态。Android 手机上的物理后退按钮或桌面浏览器上的后退按钮有效调用history.back(); 所以你需要做的就是确保按下标题栏上的后退按钮也是一样的,它就是触发导航视图弹出的按钮。

为了在 Sencha Touch 中使用它,我在主控制器中添加了以下内容:

在参考文献中,我引用了main视图( 的实例Ext.navigation.View)及其标题栏,您可以从中挂钩后退按钮的事件,例如:

refs: {
        main: 'mainview',
        mainTitleBar: 'mainview titlebar',
}...

我通过配置对象附加以下功能control..

 control: {
        main: {
            push: 'onMainPush'
        },
        mainTitleBar: {
            back: 'onBack'
        },
        ...

这些定义为:

  onMainPush: function(view, item) {
      //do what ever logic you need then..
      history.pushState();
  },
  onBack: function() {
      history.back(); //will cause the onpopstate event to fire on window..
      //prevent back button popping main view directly..
      return false;
  },

然后我附加一个函数以在通过..的init函数弹出状态时执行

init: function() {
    /* pop a view when the back button is pressed
       note: if it's already at the root it's a noop */
    var that = this;
    window.addEventListener('popstate', function() {
        that.getMain().pop();
    }, false);
},

现在,按回标题栏,执行history.back(),这又会触发popstate事件,然后导致主视图弹出。

如果你想在真实的应用程序上看到这个工作,这里有一个(v.基本的!)属性查找器应用程序在 github 上使用这种技术

于 2012-12-06T08:59:04.340 回答