zoukankan      html  css  js  c++  java
  • mui列表跳转到详情页优化方案

    原理

    因为列表页到详情页是多对一的形式,即列表页的多条数据列表对应的是一个详情页,只是数据不同而;因此,可以在加载列表页时预加载详情页,即创建一个详情页的webview,但是不显示出来,点击列表的时候在通过特定方法触发详情页的事件,获取响应数据,这种做法可以极大程度的缩短响应的时间。

    实施方法

    1. 通过预加载提前加载详情页;
    2. mui.fire 触发详情页面指定事件,调用ajax更新数据;

    一、预加载的实现(两种方法):

    官方地址

    预加载方法一:

    通过mui.init方法中的preloadPages参数进行配置。

    mui.init({
      preloadPages:[
        {
          url:prelaod-page-url,
          id:preload-page-id,
          styles:{},//窗口参数
          extras:{},//自定义扩展参数
          subpages:[{},{}]//预加载页面的子页面
        }
      ],
      preloadLimit:5//预加载窗口数量限制(一旦超出,先进先出)默认不限制
    });
    

    在使用中,可能用不到那么多的属性,下面是我的使用案例:

    mui.init({
        preloadPages: [{
            url: 'account_detail.html',
            id: 'account_detail.html'
        }]
    });
    

    只需要设置url和id就可以,详情页需要的参数在使用mui.fire的时候传过去;

    预加载方法二:

    通过mui.preload方法预加载。

    var page = mui.preload({
        url:new-page-url,
        id:new-page-id,//默认使用当前页面的url作为id
        styles:{},//窗口参数
        extras:{}//自定义扩展参数
    });
    
    预加载两种方法对比:

    1.方法一为异步创建预加载页面,并且可以同时创建多个页面,但是由于是异步的,因此不能立即获取到创建的webview对象,并且需要使用plus.webview.getWebviewById来获取到创建的webview;
    2.方法二为同步创建预加载页面,可以在创建后同步获取到webview,即方法二的“page”变量;但是方法二只能同时创建一个预加载的页面;

    二、通过mui.fire触发自定义事件

    原理:两个同时存在的webview之间可以通过mui.fire方法来触发另一个webview中的自定义事件,因此,我们可以在详情页中创建一个自定义事件,监听列表页中的mui.fire方法。
    mui.fire( target , event , data )
    target:详情页(列表页中预加载的详情页)的webview;
    event:详情页中监听的自定义事件;
    data:需要传给详情页的参数;

    1.在详情页创建并监听自定义事件“account_bid_detail_fire”:

    $.plusReady(function() {
                /**
                 * 实例化获取接口数据方法
                 */
                var get_bid_detail = new GET_BID_DETAIL();
                window.addEventListener('account_bid_detail_fire', function(event) {
                    //获得事件参数
                    var id = event.detail.id;
                        console.log(JSON.stringify(event.detail));
                    //触发ajax,根据id向服务器请求当前列表详情
                    get_bid_detail.init(id);
                });
            });
    

    mui.fire从列表页传的参数都在event.detail中,可以输出具体查看;

    2.在列表页触发“account_bid_detail_fire”事件:

    mui(document.body).on("tap", ".account_bid_list", function() {
    //触发详情页面的account_bid_detail_fire事件
        var detail_webview = null;
        if(!detail_webview) {
            //判断webview是否存在
            detail_webview = plus.webview.getWebviewById("account_detail.html");
         }
        //detail_webview是在列表页中预加载的页面;
        mui.fire(detail_webview, 'account_bid_detail_fire', {
            id: _this.dataset.id
        });
        //打开详情页面          
        mui.openWindow({
           id: "account_detail.html",//详情页webview的id
           show: {
               aniShow: 'none', //页面不显示动画
               duration: '0' //
            }
        });
    });
    

    接下来,在列表页点击列表的时候就可触发详情页的“account_bid_detail_fire”事件,然后触发详情页的ajax来更新请求的数据;

    文末福利:

    福利一:前端,Java,产品经理,微信小程序,Python等资源合集大放送:https://www.jianshu.com/p/e8197d4d9880
    福利二:微信小程序入门与实战全套详细视频教程:https://www.jianshu.com/p/e8197d4d9880



    领取方式:
    如果需要学习视频,欢迎关注 【编程微刊】微信公众号,回复【领取资源】一键领取以下所有干货资源,获取更多有用技术干货、文档资料。所有文档会持续更新,欢迎关注一起成长!



    作者:喜欢坑队友的程序员
    链接:https://www.jianshu.com/p/d9e30a54f0bf
    來源:简书
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  • 相关阅读:
    尝试实现一个简单的C语言string类型
    LeetCode.49
    Python学习 —— 实现简单的爬虫
    图表可视化表达的逻辑原理
    颜色参数
    Python交互图表可视化Bokeh:7. 工具栏
    Python交互图表可视化Bokeh:6. 轴线| 浮动| 多图表
    Python交互图表可视化Bokeh:5 柱状图| 堆叠图| 直方图
    Python交互图表可视化Bokeh:4. 折线图| 面积图
    Python交互图表可视化Bokeh:3. 散点图
  • 原文地址:https://www.cnblogs.com/ting6/p/9725674.html
Copyright © 2011-2022 走看看