没有用子页面的形式,就是从A页面点击事件 到B页面,在B页面需要上拉加载
动态传参数过去,所以先预加载页面,然后通过 fire触发预加载页面的加载数据方法。
A页面的
var page = mui.preload({
url:"stuInfoAuth.html",
id:"sfsh" //默认使用当前页面的url作为id
});
var sfsh = plus.webview.getWebviewById('sfsh');
mui.fire(sfsh, 'loadMsg', {
msgType: msgType
});
B页面的
<!--下拉刷新容器-->
<div id="msgListContainer" class="mui-content mui-scroll-wrapper " style="margin: 0; padding: 44px 0 0;">
<div class="mui-scroll am-msg-bankcard-inner">
<!--数据列表-->
<ul id="msgList" class="mui-table-view mui-table-view-chevron" style="padding:0 20px 40px;">
</ul>
</div>
</div>
mui.init({
//上拉加载消息列表
pullRefresh: {
container: "#msgListContainer",
up: {
contentrefresh: "正在加载...",
contentnomore: '没有更多数据了',
callback: uploadRefreshHandler
}
},
beforeback: function() {
var latest = plus.webview.getWebviewById('latest');
mui.fire(latest, 'initLatestMsg', {});
document.getElementById("msgList").innerHTML = "";
return true;
}
});
mui.plusReady(function(){
//加载最新消息
window.addEventListener('loadMsg', loadMsg);
});
function loadMsg(event){
msgType = event.detail.msgType;
page = 1;
totalpages = 0;
//加载数据的方法
initMsgList(page,msgType);
}
//上拉加载的方法
function uploadRefreshHandler() {
page++;
initMsgList(page,msgType);
}
function initMsgList(pageNum,msgType){
setTimeout(function() {
var dataMessage = '{"PAGE_NUM":"' + pageNum + '","MSG_TYPE":"'+msgType+'"}';
var params = dataMessage;
AMENG.ajax("getUrMesListByType.json",
params,
function(data) {
var listData = data.MSGLIST;
var length = listData.length;
console.log("返回结果是:"+JSON.stringify(data));
if (data.TOTALPAGES != 0) {
totalpages = data.TOTALPAGES;
}
console.log("结果是:"+page >= totalpages);
mui('#msgListContainer').pullRefresh().endPullupToRefresh((page >= totalpages));
var table = document.body.querySelector('.mui-table-view');
var cells = document.body.querySelectorAll('.mui-table-view-cell');
dataDiv = document.createElement("div");
dataDiv.setAttribute("id","datadiv");
table.appendChild(dataDiv);
var li = null;
for (var i = 0; i < length; i++) {
li = document.createElement("li");
li.setAttribute('data-id', listData[i].ID);
li.setAttribute('msgtype', listData[i].MSG_TYPE);
li.setAttribute('readstatus', listData[i].READ_STATUS);
li.innerHTML =
'<h1>'+ listData[i].CREATE_TIME +'</h1>' +
'<div class="am-msg-bankcard-inner-1">'+
'<h2>'+listData[i].MSG_TITLE+'</h2>'+
'<h3>'+listData[i].MSG_CONTENT +'</h3>'+
'</div>';
dataDiv.appendChild(li);
}
var currentView = plus.webview.currentWebview();
plus.webview.show(currentView);
},
onError
);
}, 1000);
上面是主要的代码部分,下面我描述一下问题
第一次从 A页面点击事件后 打开B页面,去执行 loadMsg的方法,加载出第一页的内容
10条1页,我有2页的内容,12条数据
第一次进来是正常的。
然后我点后退按钮,回到A页面,在点击事件 进入到B页面的时候,
1)如果我在后退时 执行了 document.getElementById("msgList").innerHTML = "";
那么以后每次进来B页面,它都是显示的 第一页的10条数据,然后在 最后显示没有更多数据**了
不能上拉加载了,第二页的2条数据永远也得不到了。
2) 如果我没有在后退时没有执行 document.getElementById("msgList").innerHTML = "";
那么以后每次进来B页面都会在最后累加上 第一页的10条数据
就是如果第一次你把12条数据都显示出来了,那么第二次进来就是 12+10=22条数据
第三次进来22+10=32条数据 在最后 都是显示的 没有更多数据**了
然后我仔细 想了想, 是不是 在预加载页面中,
第一次进来以后 页面就记住了上拉加载最后的状态(没有更多数据了)
以后再进来 它认为你已经页面已经把加载完了,所以都会显示 没有更多数据了
我搜了一下,看到有个说 scroll下拉刷新 不能重置DOM结果的问题(http://ask.dcloud.net.cn/question/8787 他说是bug)
然后有官方的说刷新scroll组件,我试了也不行,而且 那个滚动条 变成2个了 ,一个在上 ,一个是新加载
出来那一页数据
我也觉得这是个bug,就是 预加载的上拉刷新和 上拉加载 不能重置 DOM
TseWayne
帮我看看可好,我写在下面
2016-01-13 15:42
老哥教教我
关闭了,还叫预加载吗?
2018-12-10 07:33
老哥教教我
预加载返回不是隐藏吗
2018-12-10 07:33