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);