示例:假设如下场景:从新闻列表页面进入新闻详情页面,新闻详情页面为共用页面,通过传递新闻ID通知详情页面需要显示具体哪个新闻,详情页面再动态向服务器请求数据,mui要实现类似需求可通过如下步骤实现:
一、列表页面
<script type="text/javascript" charset="utf-8">
mui.init({
swipeBack:false,
optimize: false,
preloadPages:[{
id:'detail.html',
url:'detail.html'
}]
});
mui.plusReady(function() {
var detailPage = null;
mui('.mui-table-view-cell').on('tap', 'a', function(e) {
//获得详情页面
if(!detailPage){
detailPage = plus.webview.getWebviewById('detail.html');
}
//触发详情页面的newsId事件
mui.fire(detailPage,'newsId',{
id:1
});
//打开详情页面
mui.openWindow({
url:'detail.html', //官方这里有个坑,只写了id属性
id:'detail.html'
});
});
});
</script>
二、详情页面
<script type="text/javascript" charset="utf-8">
mui.init();
mui.plusReady(function() {
document.addEventListener('newsId', function(event) {
var id = event.detail.id;
alert(id);
});
});
</script>
结果是id根本取不到,请帮我看看是我哪里写错了吗?
5 个回复
00飞00 - 全栈 云原生
你预加载页面的时候使用了 preloadPages, 官方原话:
该种方案使用简单、可预加载多个页面,但不会返回预加载每个页面的引用,若要获得对应webview引用,还需要通过plus.webview.getWebviewById方式获得;另外,因为mui.init是异步执行,执行完mui.init方法后立即获得对应webview引用,可能会失败。
还有 自定义事件,使用mui.fire触发 详情页面的监听方法,在监听方法里用plus.webview.show() 方法打开页面的,不是在列表页面直接open的。
DCloud_UNI_CHB
列表页面的html代码怎么写的?
海洋 (作者)
你好,列表页面代码已经贴出来了
2014-11-07 16:23
DCloud_UNI_CHB
确认一下贴成功没?我这里好想看不到
2014-11-07 16:25
zengz
怎么感觉这个事件没有执行
mui('.mui-table-view-cell').on('tap', 'a', function(e)
3***@qq.com
document.addEventListener('newsId', function(event) {})
应该是window非document.
Salazar
官方demo并不完整,需要开发者花更多的心思和时间去研究