|
本帖最后由 Erondra 于 2017-4-3 10:35 编辑
打开页面时的崩溃问题解决了,但现在又出现了关闭页面时的崩溃问题。。
1、window页里我加入了api.setFrameClient,监听frame加载完成后触发frame的fnReloadFrame(),这个函数会加载一个上拉加载更多的插件,这个插件初始化后会自动读取数据,添加页面,我测试了,必须用这个插件,如果直接在fnReloadFrame()读取数据添加页面也会崩溃,这个插件等于是把页面刷新时间滞后了,目前可以保证50次打开,没有崩溃。
但是遇到了新的问题
1、点击window顶部的菜单回退按钮时,会执行api.closeWin(),但是会随机崩溃,反复点击回退按钮测试时发现,有时点1次就崩溃,有时是18次,有时是27次,崩溃现象为window部分全黑然后退出,但frame不黑,还是刷新后的页面。
2、如果使用安卓的keyback,可以安全退出页面,50次退出0次崩溃,就是不知道为什么使用api.closeWin()会崩溃,但keyback不会崩溃。
3个页面:列表页、详情window页、详情frame页
列表页:
api.openWin({
name: Details.Window,
url: 'widget://html/details/details_win.html',
pageParam: { id: id },
delay: 300
});
详情window页目前就是fnCloseWindow()时,window部分会崩
<body>
<section class="status-bar" id="uiStatusBarDom"></section>
<section class="aui-bar aui-bar-nav" id="uiHeaderDom">
<a class="aui-btn aui-pull-left" tapmode>
<span class="aui-iconfont aui-icon-left"></span>
</a>
<div class="aui-title">餐厅详情(审核中)</div>
</section>
</body>
function fnInitWindow(pageParam) {
var uiStatusBarDom = $api.byId('uiStatusBarDom'),
uiHeaderDom = $api.byId('uiHeaderDom'),
uiFooterDom = $api.byId('uiFooterDom');
$api.fixStatusBar(uiStatusBarDom);
api.setStatusBarStyle({style: 'light'});
var uiStatusBarPos = $api.offset(uiStatusBarDom),
uiHeaderPos = $api.offset(uiHeaderDom),
uiHeaderPosH = uiStatusBarPos.h + uiHeaderPos.h,
uiFooterPos = $api.offset(uiFooterDom),
uiContentHeight = api.winHeight - uiHeaderPosH;
api.openFrame({
name: Details.Frame,
url: './details_frm.html',
pageParam: {
id: uiDataParam.id
},
bounces: false,
scrollToTop: false,
vScrollBarEnabled: false,
hScrollBarEnabled: false,
rect: {
x: 0,
y: 0 + uiHeaderPosH,
w: 'auto',
h: uiContentHeight
}
});
};
function fnInitEvent() {
api.setFrameClient({
frameName: Details.Frame
}, function(ret, err){
if (ret.state == 2) {
api.execScript({
name: api.winName,
frameName: Details.Frame,
script: 'fnReloadFrame();'
});
}
});
};
function fnCloseWindow() {
setTimeout(function() {
api.closeWin();
}, 100);
};
详情frame页:目前apiready里没有任何操作,等待window调用fnReloadFrame()
function fnReloadFrame() {
// 这是一个上拉加载更多插件,能把具体的读数据操作滞后,如果不加这个插件,直接读数据并刷新页面,也会崩溃
uiDropload = $('.loading-wrap').dropload({
scrollArea: window,
domDown: {
domClass: 'dropload-down',
domRefresh: '<div class="dropload-refresh">上拉获取更多</div>',
domLoad: '<div class="aui-info dropload-load"><span class="loading"></span><span class="aui-margin-l-5">正在加载...</span></div>',
domNoData: '<div class="dropload-noData">加载失败</div>'
},
autoLoad: true,
loadDownFn: function(me) {
// 这是上拉加载更多插件的停止刷新函数
function _fnDroploadDone() {
me.lock();
me.noData();
me.resetload();
};
// 我封装的数据层、接口层、逻辑层打包函数,传入id把所有数据都读出来,读出来的数据可以直接使用dot模板生成页面。函数里没有界面操作。
fnGetFrameData({
id: uiDataParam.id,
onSuccess: function(data) {
// 当数据读取成功后执行onSuccess(data)
// 先停止插件刷新,然后隐藏插件界面元素
_fnDroploadDone();
var uiLoadingWrapDom = $api.byId('uiLoadingWrapDom');
if (!$api.hasCls(uiLoadingWrapDom, 'aui-hide'))
$api.addCls(uiLoadingWrapDom, 'aui-hide');
// 获取页面上的容器,使用dot生成页面
var uiContentWrapDom = $api.byId('uiContentWrapDom');
var uiContentTmpDot = doT.template($api.byId('uiContentTmp').innerHTML);
uiContentWrapDom.innerHTML = uiContentTmpDot(data);
},
onFailure: function(ret, err) {
// 如果失败了,停止插件操作,toast一个消息
_fnDroploadDone();
fnToast(err.msg || ret.message, 5000);
}
});
}
});
};
|
|