从页面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, 打开窗口的情况下,如何能够满足我以上的局部刷新需求,不胜感激!!!
4 个回复
chender - 与人为善
理论上是不会出现这个问题的啊,因为你从B页面返回A页面的时候,B页面会被close掉的,下次再次打开B界面时,内存中也只有一个B界面,所以不会有问题
还有你说的 “进入列表页面B,采用新窗口方式(为了每次都能进入列表页面的plusReady中执行数据初始化加载)”,这个不一定非要采用新窗口模式,可以用时间机制进行ajax刷新
villayong (作者)
从B页面返回A页面是采用mui.openWindow,应该不会关闭B页面。
我现在通过 plus.webview.currentWebview().opener(); 取得了最新一次的B页面,已解决该问题。
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