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

QQ登录

只需一步,快速开始

查看: 1829|回复: 5

[处理中4] 定义全局变量赋值后使用的时候值未变

[复制链接]

97

主题

580

帖子

1359

积分

金牌会员

Rank: 6Rank: 6

积分
1359
QQ
发表于 2016-9-7 17:02:34 | 显示全部楼层 |阅读模式
代码如下,我定义的this.userid在loadUserData里面进行新用户判断处理的时候获取不到document.addEventListener("deviceready", function(){
                                this.userid = window.device.uuid;
                        });处理的赋值。一直是默认的值,这是什么原因呢?必须放到addEventListener函数处理的外部才能正常赋值取值,代码中注释掉的部分。
define(function(require){
        var $ = require("jquery");
        var justep = require("$UI/system/lib/justep");
        require("cordova!cordova-plugin-device");
       
        var Model = function(){
                this.callParent();
                this.userid = "user1";
                this.loadUser = true;
        };

        Model.prototype.modelLoad = function(event){
                if(justep.Browser.isX5App){
                        document.addEventListener("deviceready", function(){
                                this.userid = window.device.uuid;
                        });
                }
                //this.userid = window.device.uuid;
                this.comp("userData").setFilter("filter1", "fID='" + this.userid + "'");
               
        };
        Model.prototype.getImg = function(imgUrl){
                return require.toUrl("./img/" + imgUrl);
        };

        Model.prototype.loadUserData = function(){
                if (this.loadUser) {
                        var userData = this.comp("userData");
                        userData.refreshData();
                        if (userData.getCount() == 0) {
                                alert(this.userid);
                                userData.newData({
                                        "defaultValues" : [ {
                                                "fID" : this.userid,
                                                "fName" : "新用户"
                                        } ]
                                });
                        }
                        this.loadUser = false ;
                }
        };
        Model.prototype.myConActive = function(event){
                this.loadUserData();
        };
        Model.prototype.cartConActive = function(event){
                this.loadUserData();
        };
        Model.prototype.saveUserBtnClick = function(event){
                this.comp("userData").saveData({
                "onSuccess":function(){
                        justep.Util.hint("用户信息保存成功");
                }
                });
        };
        return Model;
});

0

主题

9

帖子

21

积分

新手上路

Rank: 1

积分
21
QQ
发表于 2016-9-7 18:18:45 | 显示全部楼层
this指向问题,addEventListen事件中的this跟外面的this不是指向同一个对象。解决的办法就是提前将this赋值一个变量  var me=this;在内部用me代替
回复 支持 反对

使用道具 举报

97

主题

580

帖子

1359

积分

金牌会员

Rank: 6Rank: 6

积分
1359
QQ
 楼主| 发表于 2016-9-8 08:35:04 | 显示全部楼层
xerxes 发表于 2016-9-7 18:18
this指向问题,addEventListen事件中的this跟外面的this不是指向同一个对象。解决的办法就是提前将this赋值 ...

多谢指点。我按你说的方式修改了一下,可以赋值取值了,但又遇到另个问题:
var Model = function(){
                this.callParent();
                this.userid = "user1";
                this.loadUser = true;
        };
在Model里定义时如果给了默认值,下边的处理不变,看代码也会执行到addEventListen中,但在外面alert userid的话还是默认值user1,这是为什么呢?如果定义的时候为空,那就能正常得到device.uuid的值
传说中路过
回复 支持 反对

使用道具 举报

97

主题

580

帖子

1359

积分

金牌会员

Rank: 6Rank: 6

积分
1359
QQ
 楼主| 发表于 2016-9-8 08:44:42 | 显示全部楼层
xerxes 发表于 2016-9-7 18:18
this指向问题,addEventListen事件中的this跟外面的this不是指向同一个对象。解决的办法就是提前将this赋值 ...

我是用调试模式安装到手机上的,我反复打开app,结果一会是user1,一会是uuid,不固定也不确定,这是什么原因造成的呢?
传说中路过
回复 支持 反对

使用道具 举报

0

主题

1639

帖子

497

积分

中级会员

Rank: 3Rank: 3

积分
497
QQ
发表于 2016-9-8 10:51:13 | 显示全部楼层
carbinechun 发表于 2016-9-8 08:44
我是用调试模式安装到手机上的,我反复打开app,结果一会是user1,一会是uuid,不固定也不确定,这是什么 ...

事件的触发顺序有问题,loadUserData这个函数调用的时机,检查一下,可能是不固定。
回复我的时候请点击我当前评论旁边的回复按钮,能保证第一时间看到您的回复,在问题解决后,希望大家可以吧解决方法也分享一下,这样可以让更多的X5开发者共同进步,谢谢大家的知识共享
回复 支持 反对

使用道具 举报

97

主题

580

帖子

1359

积分

金牌会员

Rank: 6Rank: 6

积分
1359
QQ
 楼主| 发表于 2016-9-8 16:53:40 | 显示全部楼层
本帖最后由 carbinechun 于 2016-9-8 16:55 编辑
cgrddv 发表于 2016-9-8 10:51
事件的触发顺序有问题,loadUserData这个函数调用的时机,检查一下,可能是不固定。 ...

找到出现问题的具体表现了,但具体原因不明白。出现用户乱的情况是我在手机上打开app的情况下,如果修改了源码,app会刷新,但此时关闭app再打开就会与代码不一致,还是修改源码之前的信息,app也存在缓存的情况么?这种感觉与浏览器的缓存有点像,不懂app这块的机制,还是说调试模式的app也类似于浏览器的效果?
我如果是关闭app后再修改源码,那么再次打开app显示的信息与源码一致。
传说中路过
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-24 19:08 , Processed in 0.054796 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

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