估计是Artery本身的bug,在表单没有通过验证的时候,通过快速的点击保存按钮也能将数据保存到数据库中(IE8不会出现这样的问题,IE8以上的版本就出现问题了),于是使用这样的办法:
在from中添加一个链接,值设为false,然后在验证”用户名“是否重复的时候,如果重复就将链接的值设为false,不重复就设置为true。
这样在执行保存方法的时候进行判断,如果链接的值为true就正常逻辑来提交表单,如果为false就直接return;这样就不提交表单了。
验证用户名的方法:
function userLoginId_onValidClient(rc, value,parentId,parentType) {
rc.asyn = false;
rc.put('loginId', value);
rc.put('parentId', parentId);
rc.put('parentType', parentType);
rc.send();
var result = rc.getResult();
if (!Ext.isTrue(result)) {
document.getElementById("htmlAreae29a2").innerHTML="false";
return "已经存在值为“" + value + "”的登录名称!";
}
else
{
document.getElementById("htmlAreae29a2").innerHTML="true";
}
}
保存的方法:
function addUserBtn_onClickClient (rc){
var html =document.getElementById("htmlAreae29a2").innerHTML;//如果“用户名”验证不通过(貌似是Artery的一个bug),则不提交表单
if(html=="false"){//如果是update状态则要这么判断:html=="false" && rtt!='update'
return;
}
Artery.get("formArea").submit(function(result) {
if (result.rs == "ok") {
Artery.showTip("新建用户成功!",
'blankPanel6b415');
var dt = Artery.getWin().get("dynamicNav");
var node = dt.getClickNode();
// 当前节点可能是叶子节点,不能reload方法
var parentNode = node.parentNode;
// 刷新组织机构树
parentNode.reload();
// 定位更新的节点
rc.put("userId", result.id);
rc.put("getUserPath", true);
rc.send(function(res) {
dt.expandNode(res.organPath);
});
} else if (result.rs == "photoError"){
Artery.showTip("添加失败," + result.photoMsg,
'blankPanel6b415');
} else {
Artery.showTipError("新建用户失败!\n" + result.rs, 'blankPanel6b415');
}
});
}