js遭遇了事件多次触发问题

         最近和同事2个人,1个月搞出来个项目管理系统,好在是公司同事内部使用。项目是搞出来了,bug也很多。这真是诠释了

我真是在写bug啊。不过马上奔40的高龄了,能弄出个东西来,自己也蛮开心的。毕竟年纪越来越大,感觉自己生产的软件

数量肯定也是会越来越少了。毕竟写出来的软件,就像自己的孩子一样。要倾注一番心血的。不知道自己还有多少心血可以流了。

        我老婆老说,我们男人不能理解她们生孩子的痛,养孩子的苦。其实我想说,程序员都理解。那个项目不是我们养育的孩童一般。一行行,一页页的码,好不容易出来胚子了,一堆bug,不断地改改,改到客户用起来。那各种艰辛。谁干谁知道啊。

       好了废话不多说。马上也熬到要发布时,马上就要用了,在作基础数据初始化的时候,给角色分配人员,突然,选了一个人,居然关联了3边。3边同一个人,真费劲,最后总结出来,同一个角色,加几遍人,事件就被触发几次。

扒开代码一看如下:

roleusertree.getRoleUserTree = function () {
        var zNodes = [
             { id: 0, pId: -1, name: "角色列表", type: "root", open: true },
        ];

        jshelper.ajaxGet('api/RoleData/GetRoleUserAll', null, function (result) {
            if (result.Status == 1) {
                var roleNode = null, userNode = null;
                var lastRoleID = 0;
                var roleUserList = result.Entity;
                $.each(roleUserList, function (i, o) {
                    var rid = "r" + o.RoleID;
                    if (lastRoleID !== rid) {
                        roleNode = {
                            id: rid,
                            pId: 0,
                            roleId: o.RoleID,
                            name: o.RoleName,
                            type: "role",
                            open: false
                        };
                        zNodes.push(roleNode);
                        lastRoleID = rid;
                    }

                    if (o.ID !== 0) {
                        userNode = {
                            id: "ru" + o.ID,
                            pId: lastRoleID,
                            userId: o.UserID,
                            name: o.UserName,
                            roleId: o.RoleID,


                            type: "user",
                            open: false
                        };

                        zNodes.push(userNode);
                    }
                });

                //render zTree
                var t = $("#myroleusertree");
                roleusertree.pmztree = $.fn.zTree.init(t, getZTreeSetting(), zNodes);
                userlistdialog.onUserSelected4Adding.subscribe(beforeAddUserIntoRole);
            }
        });
    }

好像是由于订阅了事件以后,事件会累积触发。订阅几次,触发几次。好吧。修改代码不要累积订阅事件,每次先

取消订阅,再次订阅,这样果然解决了问题。猜测-解决。人类原始的解决的方法。

userlistdialog.onUserSelected4Adding.unsubscribe(beforeAddUserIntoRole);
userlistdialog.onUserSelected4Adding.subscribe(beforeAddUserIntoRole);

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值