00飞00
00飞00
  • 发布:2015-10-31 18:47
  • 更新:2018-12-09 22:20
  • 阅读:2540

预加载页面的上拉加载 页面DOM不能重置

分类:MUI

没有用子页面的形式,就是从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

2015-10-31 18:47 负责人:无 分享
已邀请:
00飞00

00飞00 (作者) - 全栈 云原生

已OK

返回的时候,关闭当前这个预加载页面就行了

beforeback: function() {

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

    return true;  
}  

这脑子 想了那么久 也不知道 翻翻API

  • TseWayne

    帮我看看可好,我写在下面

    2016-01-13 15:42

  • 老哥教教我

    关闭了,还叫预加载吗?

    2018-12-10 07:33

  • 老哥教教我

    预加载返回不是隐藏吗

    2018-12-10 07:33

TseWayne

TseWayne

mui('#scroll2').pullRefresh({  
            up: {  
                contentrefresh: "正在加载...",  
                contentnomore: "没有更多数据了",  
                callback: getMoreItem2,  

            }  

        });  
function getMoreItem2(){  
            var str = "";  
            var keyword = document.getElementById('kw-p').getAttribute('title');  
            var linum = mui('.kw-p li').length;  
            var fragment = document.createDocumentFragment();  
            var li;  
            mui.ajax({  
                url:'http://192.168.10.119:8000/sxinw/api/taoci/init.php',  
                type:'post',  
                data:{type:"search",kw:keyword,size:'8',offset:linum},  
                dataType:'json',  
                success:function(result){  

                    if(result['product']){  
                        plus.nativeUI.toast("正在加载...");  
                        mui.each(result['product'],function(index,item){  
                            li = document.createElement('li');  
                            li.className = 'mui-table-view-cell mui-media';  

                            str = "<a href='javascript:;' id='"+item['itemid']+"'>"+  
                                        "<img class='mui-media-object mui-pull-left' src='";  
                            if(item['thumb']){  
                                str += item['thumb'];  
                            }else{  
                                str += "../images/default_photo.png";  
                            }  
                                str +="'>";  
                                str += "<div class='mui-media-body'>"+  
                                            item['title']+'-'+item['itemid']+  
                                            "<p class='mui-ellipsis'>价格:<span class='tse-font-red'>"+item['price']+"</span>"+  
                                            "销量:"+item['sales']+"</p>"+  
                                        "</div></a>";  

                            li.innerHTML = str;  
                            fragment.appendChild(li);  
                        });  
                        document.querySelector('#kw-p').appendChild(fragment);  

                    }else{  
                        plus.nativeUI.toast("暂时没有更多的信息了!");  
                    }  
                }  
            });  

            mui('#scroll2').pullRefresh().refresh(true);  
            //关闭上拉图标  
            mui('#scroll2').pullRefresh().endPullupToRefresh();  
        }

用这个scroll组件,行是行,但是 滚动条 也变成2个了,关闭关闭滚动条那个方法不行。

  • 罗罗诺亚索隆

    $(".mui-pull-bottom-pocket").css("visibility","visible"); 这样就出来了

    2017-03-01 18:10

老哥教教我

老哥教教我 - 踏实工作

怎么解决的

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