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

QQ登录

只需一步,快速开始

查看: 4197|回复: 14

[结贴] cannot read property 'trigger' of null

  [复制链接]

140

主题

573

帖子

1080

积分

金牌会员

Rank: 6Rank: 6

积分
1080
QQ
发表于 2016-10-25 14:39:55 | 显示全部楼层 |阅读模式
偶尔在点击返回按钮时候,会出现“cannot read property 'trigger' of null”错误!不知道原因!

140

主题

573

帖子

1080

积分

金牌会员

Rank: 6Rank: 6

积分
1080
QQ
 楼主| 发表于 2016-11-15 21:18:39 | 显示全部楼层
修改系统代码后,要重新进行代码压缩打包过!执行:WeX5_V3.6\tools\dist\dist.bat
回复 支持 1 反对 0

使用道具 举报

140

主题

573

帖子

1080

积分

金牌会员

Rank: 6Rank: 6

积分
1080
QQ
 楼主| 发表于 2016-10-25 14:44:35 | 显示全部楼层
测试发现,快速点击返回按钮的时候容易报出这个错误!有时候还报“cannot read property 'find' of null”;页面已经被关闭 编码:JUSTEP230112;
回复 支持 反对

使用道具 举报

1

主题

3232

帖子

1174

积分

金牌会员

Rank: 6Rank: 6

积分
1174
QQ
发表于 2016-10-25 15:51:45 | 显示全部楼层
trigger of null  这个错误 偶尔报错? 能不能追到这个错误,打个debugger,看一下,是在什么情况下会报错?报 XX is null 一般都是这个XX前面这个方法是空的。

后面这个问题是,当一个页面没有加载完毕,就强行关闭的话,就会报这个错误
在问题解决后,希望大家可以吧解决方法也分享一下,这样可以让更多的X5开发者共同进步,谢谢大家的知识共享
回复 支持 反对

使用道具 举报

140

主题

573

帖子

1080

积分

金牌会员

Rank: 6Rank: 6

积分
1080
QQ
 楼主| 发表于 2016-10-25 16:10:53 | 显示全部楼层
见:http://bbs.wex5.com/forum.php?mo ... extra=#pid165317160
原因就是Carousel组件滑动时候点击返回出错的!
回复 支持 反对

使用道具 举报

140

主题

573

帖子

1080

积分

金牌会员

Rank: 6Rank: 6

积分
1080
QQ
 楼主| 发表于 2016-10-25 16:25:55 | 显示全部楼层
测试发现,返回速度快,偶尔会出现白屏!!!
回复 支持 反对

使用道具 举报

140

主题

573

帖子

1080

积分

金牌会员

Rank: 6Rank: 6

积分
1080
QQ
 楼主| 发表于 2016-10-25 17:07:25 | 显示全部楼层
对这一些列由快速点击返回按钮关闭页面导致的错误有没合理的解决方案呢???这些问题都比较影响用户体验的!!!
回复 支持 反对

使用道具 举报

140

主题

573

帖子

1080

积分

金牌会员

Rank: 6Rank: 6

积分
1080
QQ
 楼主| 发表于 2016-10-27 13:58:30 | 显示全部楼层
白屏;
页面已经被关闭 编码:JUSTEP230112;
cannot read property 'trigger' of null;
cannot read property 'find' of null;
这些问题,全部解决了!
回复 支持 反对

使用道具 举报

140

主题

573

帖子

1080

积分

金牌会员

Rank: 6Rank: 6

积分
1080
QQ
 楼主| 发表于 2016-10-27 14:19:59 | 显示全部楼层
1 白屏问题
原因:返回按钮点击过快导致的!而不是重复点击返回按钮导致的!
处理:所有关闭操作增加延迟300-500ms;
修改UI2/system/components/justep/common/utils.js,修改attachDoubleClickExitApp方法;
attachDoubleClickExitApp:function(conditionFn){
        var exitDtd = $.Deferred();
        if(this.attached === true){
                exitDtd.reject();
        }else{
                this.attached = true;
                document.addEventListener("deviceready", function() {
                        var exitAppTicker = 0;
                        var _closing = false; // 正在关闭状态
                        var listener = function(){
                                if(conditionFn()){
                                        if(exitAppTicker === 0){
                                                exitAppTicker++;
                                                var msg = $('<div style="display: none;z-index:99999;position: fixed;width: 100%;bottom: 25px;text-align: center;"><span style="font-size:18px;border-radius: 3px;padding: 7px;background-color: #383838;color: #F0F0F0;">再按一次退出应用</span></div>').appendTo('body');
                                                msg.fadeIn(400).delay(2000).fadeOut(400,function(){
                                                        exitAppTicker = 0;
                                                        msg.remove();
                                                });
                                        }else if(exitAppTicker == 1){
                                                exitDtd.resolve();
                                                navigator.app.exitApp();
                                        }       
                                }else{
                                        if($('html').hasClass("x-focus-in")){
                                                $('html').removeClass("x-focus-in");
                                        } else {
                                                //history.back();
                                                if (!_closing) {
                                                        _closing = true;
                                                        //console.log("attachDoubleClickExitApp: closePage begin");
                                                        try {
                                                                window.setTimeout(function() {
                                                                        justep.Shell.closePage();
                                                                        _closing = false;
                                                                        //console.log("attachDoubleClickExitApp: closePage end");       
                                                                }, 300);
                                                        } catch(error) {
                                                                _closing = false;
                                                        }
                                                }
                                                //else {
                                                //        console.log("attachDoubleClickExitApp: is closing!!!");
                                                //}
                                        }
                                }
                        };
                        document.addEventListener('backbutton', listener, false);
                        $(window).on('beforeunload', function(){
                                document.removeEventListener('backbutton', listener, false);
                    });
        }, false);
        }
        return exitDtd.promise();
},


修改UI2/system/lib/base/modelBase.js,增加delayedClose方法,在返回按钮时候调用;
_closing : false, // 关闭状态
delayedClose: function() { // 延迟关闭
        if (!this._closing) {
                this._closing = true;
                var self = this;
                window.setTimeout(function() {
                        //console.log("close window.");
                        self.owner.close();
                        _closing = false;
                }, 300);
        }
        //else {
        //        console.log("repeat close window.");
        //}
},

2 cannot read property 'trigger' of null
现象:在滑动组件Carousel自动滑动的同时点击关闭报错!
原因:窗口被关闭后执行了页面切换效果;具体是contents.js的slide方法出错!595行;
处理:contents.js的slide方法中的左右滑动效果代码修改:
setTimeout(function () {
        if (!that.$el) { // TODO 修正:窗口关闭后,滑动效果还未做完,会出错!
                //console.log("trigger not exists");
                return ;
        }
        that.$el.trigger('slide.container');
        that.getModel().fireEvent("onResize",{source:this});
        that.addRouteItem($next);
        that.fireEvent('onActiveChanged', {source : this, to: pos, from: currentPos, type: type});
        fn && fn();
        if(toContent && toContent.fireEvent)
                toContent.fireEvent('onActive', {source : that, index: pos});
}, 0);

3 cannot read property 'find' of null
现象:快速点击返回按钮关闭了页面后,然后contents组件初始化未完成时候报错!
原因:使用contents组件的页面,当再次回退到该页面就会触发contents组件的onActiveChanged事件,在该事件未执行完但是页面被关闭会出错;具体是contents.js的_optimizePerformance方法出错!93行;
处理:修改代码
_optimizePerformance:function(className){
        //console.log("contents> _optimizePerformance"); // TODOEBUG
        if (!this.$el) { // TODO 修正:窗口关闭后,初始化会出错!
                //console.log("find not exists");
                return ;
        }
        var $contents = this.$el.find('>.x-contents-content');

4 页面已经被关闭 编码:JUSTEP230112
原因:页面关闭后再次关闭;
处理:所有页面保证只关闭一次;关闭时候增加锁,保证只有一个关闭操作被执行;白屏问题解决,该问题自动消失!
回复 支持 反对

使用道具 举报

140

主题

573

帖子

1080

积分

金牌会员

Rank: 6Rank: 6

积分
1080
QQ
 楼主| 发表于 2016-10-27 16:50:53 | 显示全部楼层
修正:modeBase.js
  var self = this;
                window.setTimeout(function() {
                        //console.log("close window.");
                        self.owner.close();
                        self._closing = false;
                }, 300);
回复 支持 反对

使用道具 举报

30

主题

79

帖子

289

积分

中级会员

Rank: 3Rank: 3

积分
289
QQ
发表于 2016-11-15 15:57:48 | 显示全部楼层
我想请问一下这段代码是加在modeBase.js里面吗?为什么我都交了还是会有白屏的问题呢?我在utils.js里面修改了,除了这段代码我不知道加在哪,delayedClose这段也加了啊
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-24 05:06 , Processed in 0.061716 second(s), 24 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

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