Res
Res
  • 发布:2015-09-07 02:10
  • 更新:2015-09-07 20:46
  • 阅读:4614

求助!页面加载后,快速点击新闻列表进入详情页的时候,自定义事件没运行

分类:MUI



但是等几秒之后,返回到列表页点击进入详情页,自定义事件里的代码就可以运行了。

给人感觉就是没完全加载完,就进入了详情页,导致自定义事件失效。 但是要怎么修改呢? 求助

2015-09-07 02:10 负责人:无 分享
已邀请:
Res

Res (作者)

第二个图是详情页面的

好冷

好冷 - 诚接外包,QQ:23380891

我也遇到过这种现象
哪怕详情页只是alert一下list页面中传过来的自定义参数
点快了出不来

  • Res (作者)

    最后怎么解决的?前辈给个思路

    2015-09-07 09:10

  • 好冷

    木解决,这不在看楼下

    2015-09-08 10:06

  • 好冷尼玛死了

    看文档啊

    2016-10-28 21:27

chender

chender - 与人为善

估计是evalJS和plusReady执行先后顺序的问题;
在你的子页面plusreay之前,事件就已经通过evalJS(mui.fire底层是通过evalJS实现的)触发了

aaaa

aaaa

子页面需要先用preload预加载才能用

  • liuzhuolin

    能说的详细吗?

    2015-09-07 16:22

liuzhuolin

liuzhuolin

回楼上的 子页面已经使用了preload加载了~请问这个问题怎么解决?同样困惑

aaaa

aaaa

在列表页面先预加载详情页面
mui.preload({
url: ‘detail.html’,
id:'detail.html',
styles: {
scrollIndicator: 'none' //无滚动
}
});
然后当点击列表的时候用mui.fire传参再打开detail.html

var f_detailpage = plus.webview.getWebviewById('detail.html');
//触发详情页面的newsId事件
mui.fire(f_detailpage, 'Detail');
setTimeout(function() {
plus.webview.show('detail.html','slide-in-right'); // 显示窗口
}, 300);

然后在detail.html的页面里面写监听
window.addEventListener('Detail', function(event) { //监听加载数据
alert("ok");
});

  • liuzhuolin

    必须需要有个延迟展示吗?想让这个更快的展示。。。

    2015-09-07 16:56

  • aaaa

    不需要延迟。。。。。我自己另外加的

    2015-09-07 18:04

  • aaaa

    回复 liuzhuolin:不需要延迟。。。。。我自己另外加的

    2015-09-07 18:04

liuzhuolin

liuzhuolin

楼上的那个方法可行 但是不可取~因为需要最快的时间让其展示。。。
额 难道是mui的硬伤?

  • DCloud_UNI_FXY

    fire方法需要确保目标webview已经loaded,所以当你打开页面很快就开始点击时,这个时候,你的detailPage还没有loaded,导致fire事件失败。所以当fire时,务必确保目标webview已经loaded。你可以等详情页预加载loaded之后,再显示列表页,这样可以避免列表页显示的时候,详情页还没loaded

    2015-09-07 18:25

chender

chender - 与人为善

楼上说的不全对,fire底层用的是evalJS,
evalJS是有缓存机制的;
var view=plus.webview.create(...);//不设置url
view.evalJS(xxx)
view.loadURL(xxx);
你可以试一下,上面的代码能正常运行

  • liuzhuolin

    您好 上面的方法是创建页面而不是预加载吧?

    2015-09-07 21:25

  • chender

    回复 liuzhuolin:我说的是 DCloud_MUI_FXY说的不全对;预加载里面的代码逻辑和创建基本是一样的,我只是想说明,evalJS不会因为界面没有loaded就不执行,他会被缓存起来,loaded之后执行

    2015-09-07 21:34

  • liuzhuolin

    抱歉,evalJS貌似只能执行一段脚本,不能调用带参数的方法。。还是不行 您看能否写下例子 谢谢

    2015-09-07 22:13

  • chender

    evalJS('test("aa","bb")')这样不就呆了参数了吗

    2015-09-07 22:25

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