【NSBD】——Combotree 加载数据

本文介绍了一种将无结构的列表数据转换为树形结构的方法,并将其应用于combotree组件中,以便于用户选择物资分类。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【项目需求】


以前只做过下拉框加载数据字典,数据字典里面的项都是在同一级下。但是这次物资分类的数据字典是有分类的,像树一样,也就是说我要将整个树结构加载到我的combotree组合框里面。

 

【分析实现】


        之前都是后台取出值,然后前台赋值给相应的combobox就可以了。但是这次我们使用combotree组合框。

 

       上网查资料的时候,说的很简单。只要url的数据是树形结构的就可以了。

 

       <select id="cc"class="easyui-combotree" style="width:200px;"

       data-options="url:'get_data.php',required:true">

        </select>

 

       可是在我们项目中,组长写的后台传过来的数据不是树形结构的,而是把所有的结构都打散了,没有结构的数据,单纯的一个list

 

       所以,我们就要将后台传过来的数据进行转换。

 

functiongetCombotree(dictionaryId){

$("#equIp_Type_Ip").combotree({

lines:true;

panelWidth:200,

panelHeight:200,

url:MYPATH+"/datadict/findTotalByPid.do?pid="+dictionaryId,

//1、过滤数据显示

loadFilter:function(data){

varrows=[];

if(data.trees){

rows=data.trees;

}else{

rows=data;

}

//2、将数据转换为树形结构的数据

return convert(rows);

},

onBeforeExpand:function(node){

vartree=$("#equIp_Type_Ip").combotree("tree");

varoptions=tree.tree("options");

options.url=MYPATH+"/datadict/findTotalByPid.do?pid="+node.id;

},

onSelect:function(node){

$("#equIp_Type_Ip").combotree("setValue",node.text);    //给combotree赋值为节点的文本值

}

});

}

 

//将数据转换为树形结构的数据

functionconvert(rows){

var scope=this;  

varnodes=[];

for(var i=0;i<rows.length;i++){

varrow=rows[i];

//判断rows中的数据是否为父节点

if (!exists(rows,row.pid)){

vardata={

id:row.id,

text:row.dictname,

attributes:row.attributes

};

if(row.iconCls!="")data.iconCls=row.iconCls;

nodes.push(data);

}

}

vartoDo=[];

for(vari=0;i<nodes.length;i++){

toDo.push(nodes[i]);

}

//查询父节点的子节点

while(toDo.length){

varnode=toDo.shift();

for(var i=0;i<rows.length;i++){

varrow=rows[i];

if(row.pid==node.id){

varchild={id:row.id,text:row.dictname,attributes:row.attributes,isLeft:true};

if(row.iconCls!="")child.iconCls=row.iconCls;

if(node.children){

node.children.push(child);

}else {

node.children=[child];

}

toDo.push(child);

}

}

}

returnnodes;

}

 

//查询rows里面id是否为pid

functionexists(rows,parentid){

for(var i=0;i<rows.length;i++){

if(rows[i].id==parentid){

returntrue;

}

}

returnfalse ;

 

 

}

 

【效果展示】


 

【总结】

 

        上面的这些代码都是人家写好的代码,我只不过是拿过来用了而已。根据官方文档的解释,如果我后台传过来的数据是树形结构的是不是前台代码就不用写这么多了,直接让后台返回树形结构的数据就可以了。那这两种哪样更方便呢?

 

        等我把代码拷到笔记本上的时候,我要自己敲一下看看,比较一下两者之间的区别。

评论 24
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

幸运的梦之星

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值