d***@sina.com
d***@sina.com
  • 发布:2016-12-30 08:33
  • 更新:2017-01-05 13:45
  • 阅读:2112

ios中监听自定义事件出现问题

分类:MUI

在安卓中,自定义事件监听没有问题,但是换到IOS中却没有进入监听事件,一开始以为是JS异步问题,后来设了setTimeOut也没用,求解
列表页自定义事件代码:
var detailPage = null;
mui(".mui-table-view").on('tap', '.mui-table-view-cell', function() {
var detailPage = mui.preload({
"id": 'LX',
"url": '../Forms/View_LX.html'
});
//获取id
var id = this.getAttribute("id");
console.log(id);

            //传值给详情页面,通知加载新数据  
            mui.fire(detailPage, 'cCode', {  
                id: id,  
                itype: 'P',  
                iapp: this.app  
            });  
            //打开详情页  
            mui.openWindow({  
                id: 'LX'  
            });  
        });  

//到此处都没问题,界面也弹出,获取的值什么的都OK

跳转界面监听事件:
(function($,doc) {
$.init();

            $.ready(function() {  
                ......  
            });  

                           //此步就出问题了  
                           //IOS中无法监听到,安卓中却可以,是否哪里有问题,求解  
            window.addEventListener('cCode', function(event) {  
                var login = common.getUser();  
                cAppCode = event.detail.id;  
                var bodyform = document.getElementById('bodyForm');  
                var ulApprove = document.getElementById('ulApprove');  
                var ulfile = document.getElementById('ulfile');  
                document.getElementById('C_CODE').innerText = cAppCode;  
                loadfun.formLoad(cAppCode, 'STATEVIEW_BM_LX_UNIT', bodyform, login[0].account,ulApprove,ulfile, function(bend) {  
                    if(bend) {  
                        bEndPerson = true;  
                    }  
                });  
                iApp = event.detail.iapp;  
                iOldApp = event.detail.iapp;  
                if(event.detail.itype == 'P') {  
                    setTimeout(  
                        loadfun.readOnlyState(bodyform), 500);  
                }  
            });  
        })(mui,document);
2016-12-30 08:33 负责人:无 分享
已邀请:
d***@sina.com

d***@sina.com (作者)

我自己回答自己的问题了:
关于跳转新界面未监听到自定义事件原因:预加载的后新界面缺少一步操作(loaded),安卓里面没有这一步没问题,但是到了IOS中缺少这步自定义事件就没监听到,完整代码如下
var detailPage = null;
mui(".mui-table-view").on('tap', '.mui-table-view-cell', function() {
var detailPage = mui.preload({
"id": 'LX',
"url": '../Forms/View_LX.html'
});
//获取id
var id = this.getAttribute("id");
var showApp=this.app;
var loaded_flag = false;
detailPage.addEventListener("loaded", function() {
loaded_flag = true;
});
var pageId = setInterval(function() {
if(loaded_flag) {
clearInterval(pageId);
//传值给详情页面,通知加载新数据
mui.fire(detailPage, 'cCode', {
id: id,
itype: 'P',
iapp: showApp
});
//打开详情页
mui.openWindow({
id: 'LX'
});
}
}, 20);

        });  

其实新页面的监听内容并没有什么问题,我一开始的方向就错了;

关于子页面返回父页面未监听到自定义方法的原因是我的父页面用的是共有的窗体,也就是我采用九宫格的方式定义了几个内容,每个内容对应不同的界面,但是共用一个父模板,在安卓中我返回自定义一个方法,传给共有的父模板,安卓里面没问题,但是在IOS中各类界面无法监听到父模板中的事件,以下是完整代码
$.back = function() {
if(typeof $.options.beforeback === 'function') {
if($.options.beforeback() === false) {
return;
}
}

                if(iOldApp != iApp) {  //此处是控制是否向父页面进行传值  
                    if(mui.os.ios) {  //ISO中必须指定到准确的界面中  
                        mui.fire(plus.webview.getWebviewById('Remind/listReLX.html'), 'refresh', {  
                            id: cAppCode,  
                            iapp: iOldApp,  
                            bend: bEndPerson,  
                            bback: bBack  
                        });  
                    } else {//安卓中可以直接用父模板,default-sub是一个共有的父模板  
                        mui.fire(plus.webview.getWebviewById('default-sub'), 'refresh', {  
                            id: cAppCode,  
                            iapp: iOldApp,  
                            bend: bEndPerson,  
                            bback: bBack  
                        });  
                    }  
                }  

                var curr = plus.webview.currentWebview();  
                curr.close();  

                $.doAction('backs');  
            }
  • 太2真人

    楼主你有没有完整的代码

    2018-01-24 12:53

该问题目前已经被锁定, 无法添加新回复