villayong
villayong
  • 发布:2015-07-14 11:18
  • 更新:2016-07-15 11:04
  • 阅读:3775

mui.fire 自定义事件如何刷新多个相同标识的Webview中最新的一个窗口数据

分类:MUI

从页面A点击通过mui.openWindow({
url: ‘列表页面B的url’,
id: ‘列表页面B的url’,
createNew : true,
extras:paramJson
});
进入列表页面B,采用新窗口方式(为了每次都能进入列表页面的plusReady中执行数据初始化加载),

然后再列表页面B中打开某条数据进入编辑页面C,在C页面编辑完数据后,想局部刷新列表页面B(即:点击的这条数据的区域,其他数据不刷新),编辑页面我是这样写的

var returnWebId= plus.webview.getWebviewById(列表页面B的url);
mui.fire(‘列表页面B的url’,'replyCommentBack',‘其他参数’ ) //通过自定义事件调用列表页面的replyCommentBack方法局部刷新数据。
mui.back(); //返回到列表页面

问题出来了,如果应用没有从新打开过列表页面B,就能实现局部刷新B页面的效果。
如果多次从A页面点击进入列表页面B,通过plus.webview.getWebviewById获取页面,该方法详解如下:
在已创建的窗口列表中查找指定标识的Webview窗口并返回。 若没有查找到指定标识的窗口则返回null,若存在多个相同标识的Webview窗口,则返回
第一个创建的Webview窗口****

这里返回的是第一个,所以我最新打开的列表页面B无法刷新数据,数据都刷新到第一个打开的列表页面中了,有没有办法拿到我最新创建的列表页面B,然后调用mui.fire实现局部刷新列表页面数据??

请问各位大神在 使用 createNew : true, 打开窗口的情况下,如何能够满足我以上的局部刷新需求,不胜感激!!!

2015-07-14 11:18 负责人:无 分享
已邀请:
chender

chender - 与人为善

理论上是不会出现这个问题的啊,因为你从B页面返回A页面的时候,B页面会被close掉的,下次再次打开B界面时,内存中也只有一个B界面,所以不会有问题
还有你说的 “进入列表页面B,采用新窗口方式(为了每次都能进入列表页面的plusReady中执行数据初始化加载)”,这个不一定非要采用新窗口模式,可以用时间机制进行ajax刷新

villayong

villayong (作者)

从B页面返回A页面是采用mui.openWindow,应该不会关闭B页面。

我现在通过 plus.webview.currentWebview().opener(); 取得了最新一次的B页面,已解决该问题。

tuchaofu

tuchaofu - 没有不能实现的功能,只有没有理清楚的逻辑

思路:局部做成新窗口,你之前的方法就好了

凯尔

凯尔 - 快乐的程序员。

父页面中显示子页面,如何对子页面进行刷新呢,通过fire事件实现

  • 赵梦欢

    可以通过子页面id用plus.webview.getWebviewById( id );拿到子页面对象,然后执行reload(true)方法。http://www.html5plus.org/doc/zh_cn/webview.html#plus.webview.WebviewObject.reload

    2016-07-15 11:19

  • 凯尔

    reload我之前用了,不过用户体验效果不好;所以想用fire事件实现,见http://ask.dcloud.net.cn/question/20852

    2016-07-15 11:21

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