zoukankan      html  css  js  c++  java
  • 在onBackPress中实现退出拦截时不生效

    现象描述

    在快应用中弹出一个弹窗,期望效果是该弹窗在用户确认后再退出,但是使用onbackpress控制确认弹窗后自动退出不生效。

    问题分析

    快应用引擎实现机制决定了onbackpress不能有耗时的操作。当超过一段时间后,如果代码还没有处理完,就会按返回值为false处理,即默认关闭该页面。问题代码中通过$watch监听showResult的变化,若变化则执行fetch操作,而这些操作可能还没执行完,从而导致弹窗自动关闭。
    问题代码如下:

    1.  onBackPress() {
    2.    console.log("main onBackPress. status = " + this.showResult);
    3.    if (this.showResult) {
    4.      this.$element('textarea').focus({ focus: false });
    5.      this.content = '';
    6.      this.touchedIndex = -1;
    7.      //解决因监听showResult变化后的事件处理过缓问题,导致系统返回键有时失效
    8.      this.showResult = false;
    9.      return true;10.   }
    11.   return false;
    12. },
    13. initDataWatchConfig() {
    14.   let that = this;
    15.   this.$watch('showResult', (newV, oldv) => {
    16.     if (!that.showResult) {
    17.       audio.stop();
    18.       this.getphoto()//此处是一个比较耗时的操作,以fetch举例,只有清除数据后第一次打开可以复现
    19.     }
    20.   });
    21. },
    22. getphoto: function () {
    23.   var that = this
    24.   fetch.fetch({
    25.     url: ' 
    26.     success: function (ret) {
    27.     },
    28.     fail: function (msg, code) {
    29.     }
    30.   })}
    

    解决方法

    给耗时比较长的操作增加延时。为this.showResult = false增加一个延时,优化后的代码如下:

    1.  onBackPress() {
    2.    console.log("main onBackPress. status = " + this.showResult);
    3.    if (this.showResult) {
    4.      this.$element('textarea').focus({ focus: false });
    5.      this.content = '';
    6.      this.touchedIndex = -1;
    7.      //增加延时,解决因监听showResult变化后的事件处理过缓问题,导致系统返回键有时失效
    8.      setTimeout(() => {
    9.          this.showResult=false; 
    10.     }, 800);
    11.     return true;
    12.   }
    13.   return false;
    14. }
    

    原文链接:https://developer.huawei.com/consumer/cn/forum/topic/0204411119222660356?fid=18

    原作者:Mayism

  • 相关阅读:
    PhpStorm一次性折叠所有函数或者方法
    安装IntelliJ IDEA热部署tomcat插件JreBel
    mysql-master-ha
    mysql sys table
    Innodb 表修复(转)
    MySQL Binlog 【ROW】和【STATEMENT】选择(转)
    Innodb 存储引擎(转)
    MySQL 利用SQL线程对Binlog操作(转)
    针对跑MySQL的Linux优化【转】
    MySQL explain key_len 大小的计算
  • 原文地址:https://www.cnblogs.com/developer-huawei/p/14497953.html
Copyright © 2011-2022 走看看