ArvinHe
ArvinHe
  • 发布:2017-07-06 11:58
  • 更新:2017-07-08 00:23
  • 阅读:2635

MUI页面传值失败

分类:MUI

案列是这样的:
想要通过点击列表,跳转到详细页面,同时将列表点击的ID值传值到详细页面,打印出来。

我根据官方文档的代码示例实现了列表跳转到详细页面,但是ID值在详细页面获取不到。不知道问题出在哪里。。

求解,谢谢!

1.列表 HTML 代码


     <body>  
        <ul class="mui-table-view">  
            <li class="mui-table-view-cell" value="1">Item 1</li>  
            <li class="mui-table-view-cell" value="2">Item 2</li>  
            <li class="mui-table-view-cell" value="3">Item 3</li>  
        </ul>  
    </body>

列表JS代码

<script type="text/javascript" charset="utf-8">  

        //初始化预加载详情页面  
        mui.init({  
            preloadPages: [{  
                id: 'pageD',  
                url: 'detail.html'  
            }]  
        });  

        //添加列表项的点击事件  
        mui('.mui-table-view').on('tap', 'li', function(e) {  
            var value = this.getAttribute('value');  

            var detail = null;  
            mui.plusReady(function() {  
                detail = plus.webview.getWebviewById('pageD');  
            });  
            //传值给详情页面,通知加载新数据  
            mui.fire(detail, 'getDetail', {  
                id: value  
            });  
            //打开新闻详情  
            mui.openWindow({  
                id: 'detail',  
                url: 'detail.html'  
            });  
        });  
    </script>

2.详细页面JS代码

<script type="text/javascript" charset="utf-8">  
        mui.init();  

        mui.plusReady(function() {  
            //添加newId自定义事件监听  
            window.addEventListener('getDetail', function(event) {  
                //获得事件参数  
                var value = event.detail.id;  
                console.log("value:" + value)  
            });  
        })  
    </script>  

页面能跳转,但是传过来的值取不到。。

2017-07-06 11:58 负责人:无 分享
已邀请:
王者地带

王者地带 - 5+混合APP开发教程网 | http://www.html5-app.com | 咨询QQ: 2564034335


最好把mui.plusReady写在外面,  

mui.plusReady(function()  
 {  

 //添加列表项的点击事件  
        mui('.mui-table-view').on('tap', 'li', function(e) {  
            var value = this.getAttribute('value');  

            var  detail = plus.webview.getWebviewById('pageD');  

            //传值给详情页面,通知加载新数据  
            mui.fire(detail, 'getDetail',   
            {  
               id: value  
            });  
            //打开新闻详情  
            mui.openWindow({ id: 'pageD'});  
        });  

  });
王者地带

王者地带 - 5+混合APP开发教程网 | http://www.html5-app.com | 咨询QQ: 2564034335

//打开新闻详情
mui.openWindow({
id: 'detail',
url: 'detail.html'
});

这里错了, 应该是: mui.openWindow({id: 'pageD'});

//初始化预加载详情页面
mui.init({
preloadPages: [{
id: 'pageD',
url: 'detail.html'
}]
});

你已经预加载detail.html 页面了, 它的ID是pageD, 直接mui.openWindow({id: 'pageD'}); 打开该页面就可以了。

雪之梦技术驿站

雪之梦技术驿站 - 你在互联网的路上匆匆而来,雪之梦技术驿站助你满载而去

mui.plusReady(function() {
detail = plus.webview.getWebviewById('pageD');
});
你获取详情页的方式不对

  • ArvinHe (作者)

    大哥,按照你上面说的方式也拿不到值。~ ~!

    2017-07-06 14:52

  • ArvinHe (作者)

    我在mui.plusReady(function() {} 方法中console.log()添加了打印值,但是发现不会打印,说明没有进来。

    2017-07-06 14:55

ArvinHe

ArvinHe (作者) - 程序员

而且发现一个问题,在plusReady() 方法中的console.log()不打印,说明没有执行这个方法。。
这是啥情况呢?

//添加列表项的点击事件  
        mui('.mui-table-view').on('tap', 'li', function(e) {  
            var value = this.getAttribute('value');  

            var detail = null;  
            mui.plusReady(function() {  
                console.log("首页传值")  
                detail = plus.webview.getWebviewById('pageD');  
            });  
            //传值给详情页面,通知加载新数据  
            mui.fire(detail, 'getDetail', {  
                id: value  
            });  
            //打开新闻详情  
            mui.openWindow({  
                id: 'detail',  
                url: 'detail.html'  
            });  
        });
  • n***@gmail.com

    plusReady是在页面创建时自动触发,而且只触发一次,你的绑定事件里他早就触发了,你可以写在外面,init方法之后试试就会触发的

    2017-07-06 19:30

ArvinHe

ArvinHe (作者) - 程序员

为啥没人解答呀。。。~ ~!

奔跑的蘑菇

奔跑的蘑菇

//添加列表项的点击事件  
        mui('.mui-table-view').on('tap', 'li', function(e) {  
            var value = this.getAttribute('value');  
            //打开新闻详情  
            mui.openWindow({  
                id: 'detail',  
                url: 'detail.html',  
                extras: {  
                        id: value  
            }  
            });  
        });

然后在detail.html页面
var self = plus.webview.currentWebview();
参数=self["id"];

试试这种方式行不行

回梦無痕

回梦無痕 - 暂停服务

mui.fire和openWebView都写到mui.plusReady里面,因为如果把mui.fire写在外面,而mui.plusReady是异步的,里面的代码很有可能还没执行,导致页面还没有获取到。就执行了mui.fire,会找不到页面而传值失败

  • ArvinHe (作者)

    谢谢,发现问题了,因为mui.plusReady只有在真机调试的时候才会有效果。

    2017-07-10 16:49

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