起步软件技术论坛
搜索
 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 4046|回复: 10

[结贴] modelunload事件如何激发!

[复制链接]

9

主题

57

帖子

205

积分

中级会员

Rank: 3Rank: 3

积分
205
QQ
发表于 2018-7-5 11:43:45 | 显示全部楼层 |阅读模式
请教一下:
在model中unload事件何时才会激发,我想每次打开页面时,都自动调用load事件,现在不管采用何种方法关闭,都无法执行unload,那么再次打开也就无法调用load, 不知道是不是还有什么方法是我没有找到的;
目前使用的返回或者关闭页面的方法:
{"operation":"window.close"}
justep.Shell.closePage();
this.close();
均未调用unload事件;
        Model.prototype.modelUnLoad = function(event){
                console.log("读取 modelUnLoad:");
        };
控制台没有看到执行的输出内容;

9

主题

57

帖子

205

积分

中级会员

Rank: 3Rank: 3

积分
205
QQ
 楼主| 发表于 2018-7-5 14:00:44 | 显示全部楼层
看来没有人接触到这个问题!
回复 支持 反对

使用道具 举报

发表于 2018-7-5 16:25:56 | 显示全部楼层
本地测试,调用
{"operation":"window.close"}
justep.Shell.closePage();
this.close();

都可以触发 onUnLoad 事件的! 你可以debugger调试下

确保model上是真正绑定了这个事件的!
qq:1912779713
WeX5教程--WeX5下载
回复 支持 反对

使用道具 举报

9

主题

57

帖子

205

积分

中级会员

Rank: 3Rank: 3

积分
205
QQ
 楼主| 发表于 2018-7-5 20:52:12 | 显示全部楼层
没明白,绑定事件,不就是在model的事件属性里面onunload双击生成默认的modelUnLoad事件代码吗?
然后在JS文件中就可以看到:
        Model.prototype.modelUnLoad = function(event){
                console.log("modelUnLoad 调用");       
        };
然后添加一个控制台输出信息,这没毛病啊!
还是说,我真不懂这个事件定义?
回复 支持 反对

使用道具 举报

9

主题

57

帖子

205

积分

中级会员

Rank: 3Rank: 3

积分
205
QQ
 楼主| 发表于 2018-7-5 21:00:31 | 显示全部楼层
我单独创建一个项目目录,添加一个主页面,一个子页面,
主页面添加了一个按钮,和一个windowsdialog对象,设置对应子页面:
按钮代码:
        Model.prototype.btnOpenTestClick = function(event){
                this.comp('loadTest').open();
        };
打开子页面:
然后在子页面,双击model的onunload事件定义默认的事件代码:
        Model.prototype.modelUnLoad = function(event){
                console.log("modelUnLoad 调用");        
        };
然后浏览器测试,主页面点击按钮,打开子页面,然后在子页面中默认返回的:
调用的是:{operation:'window.close'}
测试子页面返回时,并没有输出控制台信息:

删除子页面的返回代码: 双击设置bind-click, 定义默认的返回事件backBtnClick:
        Model.prototype.backBtnClick = function(event){
                this.close();
        };
浏览器测试,主页面通过按钮,打开子页面后,再选择左上角返回,控制台依然没有返回信息;

也就是说,根本就没有激活onunload事件;分析原因,应该是页面返回时并没有关闭页面;
我想问问,如果this.close();和{operation:'window.close'}不是关闭页面的方法,那么什么是关闭页面的方法?
另外准备测试一下: justep.Shell.closePage();
因为在项目中,是已经测试过justep.Shell.closePage();也是无效的,只是新创建的项目目录并没有测试justep.Shell.closePage();
回复 支持 反对

使用道具 举报

9

主题

57

帖子

205

积分

中级会员

Rank: 3Rank: 3

积分
205
QQ
 楼主| 发表于 2018-7-5 21:10:40 | 显示全部楼层
在主页面创建:contents1
                this.shellImpl = new ShellImpl(this, {
                        contentsXid : "contents1",
                        pageMappings : {
                                "index":{ //主页
                                        url : require.toUrl('./index.w')
                                },
                                "test":{ //测试页
                                        url : require.toUrl('./test.w')
                                }
                        }
                });
通过按钮调用子页面显示:
        Model.prototype.btnOpenTest2Click = function(event){
                justep.Shell.showPage("test");
        };
子页面的返回按钮事件:
        Model.prototype.backBtnClick = function(event){
                justep.Shell.closePage();
        };
        Model.prototype.modelUnLoad = function(event){
                console.log("modelUnLoad 调用");       
        };
经过测试,子页面返回时,控制台输出了内容:
目前这种方式是可以激活onunload事件;
回复 支持 反对

使用道具 举报

9

主题

57

帖子

205

积分

中级会员

Rank: 3Rank: 3

积分
205
QQ
 楼主| 发表于 2018-7-5 21:13:49 | 显示全部楼层
但这个contents将新的页面W内容嵌入contents,并没有解决通过open方式打开独立页面的返回事件调用;也就是说,通过简单的windowdialog的open事件打开的页面,是肯定无法调用this.close或者{operation:'window.close'}激活onunload事件,这是有点奇怪吧!
回复 支持 反对

使用道具 举报

发表于 2018-7-6 09:47:38 | 显示全部楼层
FC2017 发表于 2018-7-5 21:13
但这个contents将新的页面W内容嵌入contents,并没有解决通过open方式打开独立页面的返回事件调用;也就是 ...

需要接管contents组件的change事件, 在父页面接管事件,然后判断是哪个content的切换,执行相应的代码!
qq:1912779713
WeX5教程--WeX5下载
回复 支持 反对

使用道具 举报

9

主题

57

帖子

205

积分

中级会员

Rank: 3Rank: 3

积分
205
QQ
 楼主| 发表于 2018-7-6 18:59:26 | 显示全部楼层
liangyongfei 发表于 2018-7-6 09:47
需要接管contents组件的change事件, 在父页面接管事件,然后判断是哪个content的切换,执行相应的代码! ...

我现在打开页面并不是从contents组件中切换;
而是直接使用windowdialog.open,这种方法就无法在关闭页面返回的时候激活onunload事件;
回复 支持 反对

使用道具 举报

发表于 2018-7-9 13:58:11 | 显示全部楼层
FC2017 发表于 2018-7-6 18:59
我现在打开页面并不是从contents组件中切换;
而是直接使用windowdialog.open,这种方法就无法在关闭页面 ...

因为windowDialog 默认是缓存的,页面不会真的注销掉的,所以不会触发onunload

如果你把 windowDialog 组件的 重新刷新页面打开
forceRefreshOnOpen="true"

你可以发现,重新打开windowDialog 会触发的
qq:1912779713
WeX5教程--WeX5下载
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|X3技术论坛|Justep Inc.    

GMT+8, 2024-6-1 16:27 , Processed in 0.058057 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表