海洋
海洋
  • 发布:2014-11-07 15:15
  • 更新:2017-06-12 10:35
  • 阅读:3349

自定义事件我照着官方的操作一遍,发现根本没有作用!

分类:MUI

示例:假设如下场景:从新闻列表页面进入新闻详情页面,新闻详情页面为共用页面,通过传递新闻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根本取不到,请帮我看看是我哪里写错了吗?

2014-11-07 15:15 负责人:无 分享
已邀请:
00飞00

00飞00 - 全栈 安全 原生

你预加载页面的时候使用了 preloadPages, 官方原话:
该种方案使用简单、可预加载多个页面,但不会返回预加载每个页面的引用,若要获得对应webview引用,还需要通过plus.webview.getWebviewById方式获得;另外,因为mui.init是异步执行,执行完mui.init方法后立即获得对应webview引用,可能会失败。

还有 自定义事件,使用mui.fire触发 详情页面的监听方法,在监听方法里用plus.webview.show() 方法打开页面的,不是在列表页面直接open的。

DCloud_UNI_CHB

DCloud_UNI_CHB

列表页面的html代码怎么写的?

  • 海洋 (作者)

    你好,列表页面代码已经贴出来了

    2014-11-07 16:23

  • DCloud_UNI_CHB

    确认一下贴成功没?我这里好想看不到

    2014-11-07 16:25

zengz

zengz

怎么感觉这个事件没有执行
mui('.mui-table-view-cell').on('tap', 'a', function(e)

345420287@qq.com

345420287@qq.com

document.addEventListener('newsId', function(event) {})
应该是window非document.

Salazar

Salazar

官方demo并不完整,需要开发者花更多的心思和时间去研究

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