mui开发app之自定义事件以更新其他页内容

我之前做过jquery mobile的开发,那还是前年的事情

在jquery mobile中,由于页面是存储在div[data-role=page]的dom中(jqmobile通过对data-role的dom分析解释app的页面布局和切换,不会每次都加载完整的html页面,所以js摆放位置需要尤其注意,不能再head当中,因为不会去读head)

<body>
<div data-role="page">

  <div data-role="header">
    <h1>欢迎来到我的主页</h1>
  </div>

  <div data-role="main" class="ui-content">
    <p>我现在是一个移动端开发者!!</p>
  </div>

  <div data-role="footer">
    <h1>底部文本</h1>
  </div>

</div>
</body>

 

所以,jqmobile可以在切换页面中轻松的判断页面事件,使用如下代码,有兴趣可以看看:

 $(document).on("pageinit",function(){
   alert("pageinit 事件触发!")
 });

其中“pageinit”只是其中一种事件罢了,还有pageshow,pagebeforeshow,pagecreate,pagehide,pagechange,pageload等等的方法来判断页面的事件,详见jquery mobile事件

 

但是不巧的是,我在mui的webview中并没有看到这样的方法判断事件(本身mui和jqmobile不同,jqmobile是spa单页调用,mui是真正的在页面中跳转的),所以当你在页面切换的时候不能根据页面变化来触发一些反复调用的js方法,因为每一次都在新的html中(重复调用的页面会在缓存中,这也是为什么返回后不会重新执行html文件下的js方法原因,真蛋疼)

关于spa和html原生跳转自行百度

比如:我现在编辑了个人资料,返回首页时候,由于mui.back并不会重新生成html(事实上我们也不希望重新生成的),那么js方法不会重新执行的,而我在index中有一个刷新用户信息的方法也不能用了

最初,我想我可以在返回前,保存用户资料的时候触发这个方法,可是你会发现这时因为将要返回到的页面的dom根本还不存在,你刷新个毛啊!(・∀・ ?(・∀・ ?(・∀・ ?)

最后,查找mui,dcloud的官方文档,决定采用自定义事件fire()+webview()来解决,代码应该在编辑页面,当编辑保存后页面$.back()时候触发,mui.init()中有beforeback参数可以使用,在此之前先看看关于$.back()的官网解释:

mui框架将窗口关闭功能封装在mui.back方法中,具体执行逻辑是:

  • 若当前webview为预加载页面,则hide当前webview;
  • 否则,close当前webview;

在mui框架中,有三种操作会触发页面关闭(执行mui.back方法):

  • 点击包含.mui-action-back类的控件
  • 在屏幕内,向右快速滑动
  • Android手机按下back按键

代码如下:

mui.init({
                    swipeBack: true,
                    beforeback: function() {
                        //获得index界面的webview(缓存中)
                        var view = plus.webview.getWebviewById('index');
                        //updateHeadInfo为事件,不是方法!
                        mui.fire(view, 'updateHeadInfo');
                        //返回true,继续页面关闭逻辑
                        return true;
                    }
                });

返回到目标页面时,这个事件触发的方法已经被执行了

var update_head_info = function() {                    
                    alert("sss");//测试
                }
window.addEventListener("updateHeadInfo",update_head_info);//添加自定义事件,其他页面调用

 注意:addEventlEListener的第二参数传入的是方法(函数)的变量名,update_head_info,后面不能添加括号,否则没有触发“updateHeadInfo”就会立即执行(也就是页面一载入就立马执行,这会很让人费解)

 

当然,before的代码也可以放到,提交表单成功之后,或者任何想要的时候,并不一定需要放在beforeback发生时

转载于:https://www.cnblogs.com/devilyouwei/p/6306603.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值