szaos
szaos
  • 发布:2016-02-13 14:54
  • 更新:2016-02-14 12:00
  • 阅读:1432

不能多次 show

分类:HTML5+

var detailPage = null;
detailPage = plus.webview.create("/gameDetail/index.html");
//添加列表项的点击事件
mui(".js-banner").on('tap','.js-banner-cell',function(){
alert(111111)
//获取id
var id = this.getAttribute("id");
//获得详情页面
console.log(detailPage)
if(!detailPage){
detailPage = plus.webview.create("/gameDetail/index.html");
}
console.log(detailPage)
//触发详情页面的newsId事件(自定义newsId事件)
mui.fire(detailPage,'newsId',{
id:id
});
//打开新闻详情
plus.webview.show(detailPage);
// detailPage.show("slide-in-right",150);
})

这段代码 只有 第一次点击时候能 展示 detailPage,之后就没有效果

代码是在 plusReady 中的, 并且 console的detailPage 都是

[object Object] at home/js/set.js:54
[object Object] at home/js/set.js:58

另外这个编译器不好调试。如果能像谷歌那样展开内容就好了

2016-02-13 14:54 负责人:无 分享
已邀请:
maq

maq

在第二次点击之前,你是不是敲过 back?那样的话可能已经把那个 webview 关闭了。

szaos

szaos (作者)

应该是,但是 console又能 有[object Object]

现在是每次点击 从新创建,发现又不能传值了。。。。

我要把详情页 看看 back 里面应该有 close,看看改成 hide 行不行。

感觉好乱

maq

maq

detailPage 变量的值是 js 的 Object,这个不会凭空消失,但是它对应的 webview 是系统对象,已经被关闭销毁了。

你这种应用场景,详情页面是不应该被 close 的。应该用 preload 方式来创建,这样在 back 的时候就会自动使用 hide() 而不是 close()。

每次点击时新创建详情窗口是不行的,因为刚刚创建还没有 ready,无法接受传值。当然你可以在创建之后监听 webview.onloaded 事件再传值,也是可以的,但终究不如预加载的体验好。

其实想清楚了一点都不乱 :)

szaos

szaos (作者)

mui.oldBack = mui.back;
mui.back = function() {
plus.webview.hide( plus.webview.currentWebview() );
};

我重写了 详情页 的 back。

开始是用 preload的, 文档里有个介绍微博的案例

但是我在主页的一个菜单中 加入一个子view 为列表(listView),

还有一个其他的内容也 会跳转到 一个包含(listView)的listPage(listView为listPage的子view)

在主页 和 生成listPage 的页面,找不到一个最好的 preload的时机。

就是这个listView 需要在两个地方被引用,却不知道在哪里创建好了。

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