在页面上,使用combotree控件的时候,由于节点是异步加载的,人为点击展开节点,才会加载下层子节点。当combotree加载数值的时候,如果是根节点,则可以展示正常的节点文本在combotree文本框中,如果加载数值的节点id是更深层次的子节点,则无法正常展示节点文本,而只能展示原始的节点id在combotree的文本框中,因为这个时候需要被匹配的那个节点根本没有加载出来,所以只能显示id。为了解决这个显示文本不正常的问题,尝试了很多方法,包括:一次性全加载,局部按路径加载,都无法满足要求,直到看到一篇BLOG,通过对combotree的tree对象追加一个用户想要的默认值节点,并使其隐藏来达到设置默认值的效果。
BLOG:http://blog.csdn.net/k769444252/article/details/50311431
根据这个BLOG上面介绍的方法,具体实现为:
//为combotree增加默认值隐藏节点,解决因异步加载导致默认值id直接显示到文本框中的问题
//cbtid:combotree的id
//defval:生成节点的id
//deftext:生成节点的文本用于显示
function defaultValue(cbtid,defVal,defText){
var combotree =$('#'+cbtid);
var tree = combotree.combotree('tree');
var defNode = tree.tree('find',defVal);
if(!defNode){
tree.tree('append', {
data: [{
id: defVal,
text: defText
}]
});
defNode = tree.tree('find',defVal);
//console.log(defNode);
//console.log(combotree);
combotree.combotree('setValue',defVal);
tree.tree('select',defNode.target);
defNode.target.style.display='none';
}else{
combotree.combotree('setValue',defVal);
}
}
function createTree(id,relaCd) {
$('#rootOrgId').tree({
url: '<%=basePath %>organizationRelation/tree',
required: true,
lines:true,
queryParams:{id:id,relaCd:relaCd},
onLoadSuccess:
function(node, data){
if (data.length > 0) {
var nodeSelect = $("#rootOrgId").tree('getSelected');
if(nodeSelect == null) {
//找到第一个元素
var n = $('#rootOrgId').tree('find', data[0].id);
//调用选中事件
$('#rootOrgId').tree('select',n.target);
}
}
},
onSelect:function(node) {
$("#selectOrgIdHidden").val(node.id);
var parentNode = $('#rootOrgId').tree('getParent', node.target);
if(parentNode == null || parentNode == undefined || parentNode == "") {
$("#parentOrgIdHidden").val("");
} else {
$("#parentOrgIdHidden").val(parentNode.id);
}
createOrgTypeCombotree(node.id);
$.ajax({
url:'<%=basePath %>organization/getOrg',
type:'GET',
data:{orgId:node.id},
dataType:'json',
timeout:1000,
cache:false,
async:false,
error:errorFunction,
success:function(data) {
if(data != null) {
$('#orgIdHidden').val(data.orgId);
$('#orgNameId').textbox('setValue',data.orgName);
$('#orgCodeId').textbox('setValue',data.orgCode);
$('#orgPriorityId').textbox('setValue',data.orgPriority);
$('#areaCodeId').textbox('setValue',data.areaCodeId);
$('#cityTownId').combobox('setValue',data.cityTown);
$('#orgGroupCodeId').textbox('setValue',data.orgGroupCode);
$('#orgShortNameId').textbox('setValue',data.orgShortName);
$('#orgDetailPartyNameId').textbox('setValue',data.partyName);
$('#partyIdHidden').val(data.partyId);
$('#orgTypeId').combobox('setValue',data.orgType);
$('#orgFullNameId').textbox('setValue',data.orgFullName);
defaultValue('telcomRegionId',data.telcomRegionId,data.regionName);
defaultValue('locationId',data.locationId,data.locationName);
}
}
});
}
});
}
其中核心方法为defaultValue,该方法通过对combotree的tree对象追加一个用户想要的默认值节点,并使其隐藏来达到设置默认值的效果。