extjs 遍历树 根据子节点修改父节点图标

   上篇文章介绍了一个后台产生故障,前台接受修改树节点的icon,这是相对的故障解决之后,根据修改的故障等级和故障的设备id,来修改相应icon。

相应的逻辑是,当页面确定消除故障是,会根据故障等级和设备id去数据库消除,然后再action层获取数据(这边方法下一个文章说一下),前台就根据这个子节点去修改当前的icon,然后选中子节点的父节点 ,去遍历当前子节点判断当前父节点最高的故障等级是不是消除的故障等级,如果是就修改成消除之后的最大故障等级,如果不是,只修改当前子节点的icon,其他不变。

  var faultinfo = JSON.parse(event.data);
    var roonodes = treeForTab.getRootNode().childNodes;
    for(var i=0;i<faultinfo.length;i++){
        
        findchildnode(roonodes[0],faultinfo[i]);
    }
    // 获取主节点
     // 开始递归
    function findchildnode(roonodes,data) {
        var faultLevel = data.faultMaxLevel;
        var moduleId = data.moduleId;
        var childnodes = roonodes.childNodes;
        for (var i = 0; i < childnodes.length; i++) { // 从节点中取出子节点依次遍历
            var rootnode = childnodes[i];
            var maxLevel = rootnode.get("faultMaxLevel");
            var rootnodeModuleId = rootnode.get("moduleId");
            if (moduleId == rootnodeModuleId&&rootnode.childNodes.length==0) {
                //if (maxLevel >faultLevel) {
                    rootnode.set("faultMaxLevel",faultLevel);
                    var imgUrl = setImg(rootnode,faultLevel)
                    if(imgUrl!=null){
                        var parentnode = rootnode.parentNode;
                        findnownode(parentnode);
                    }
                    
                
                //}
            }
            if (rootnode.childNodes.length > 0) { // 判断子节点下是否存在子节点,个人觉得判断是否leaf不太合理,因为有时候不是leaf的节点也可能没有子节点
                findchildnode(rootnode,data); // 如果存在子节点 递归
            }
        }
        
    }
    function findnownode(parentnode) {
        var childNodes = parentnode.childNodes;
        var pLevel = parentnode.get("faultMaxLevel");
        var maxLevel = 0 ;
        for (var i = 0, l = childNodes.length; i < l; i++) {
            var child = childNodes[i];
            var level = child.get("faultMaxLevel");
            maxLevel = level>maxLevel?level:maxLevel;
            
        }

        if (maxLevel!=pLevel){
            parentnode.set("faultMaxLevel",maxLevel);
            setImg(parentnode,maxLevel);
            // 设置parent的最大level
            // 设置图片
            var pNode = parentnode.parentNode;
            if (null != pNode) {
                findnownode(pNode);
            }

        }
    }
    
    function setParentIcon(node, icon) {
        var parent = node.parentNode;
        if (parent != null) {
            parent.set("icon", icon);
        }
    }
    function setImg(rootnode,faultLevel) {
        var imgUrl = null;
        if (faultLevel == 5) {
            imgUrl = "image/Notice16.png"
        } else if (faultLevel == 10) {
            imgUrl = "image/GeneralWarning16.png"
        } else if (faultLevel == 15) {
            imgUrl = "image/UrgentWarning16.png"
        } else if(faultLevel == 20){
            imgUrl = "image/SeriousWarning16.png"
        }else if(faultLevel == 0){
            imgUrl ='';
        }
        if (imgUrl !=null) {
            rootnode.set("icon", imgUrl);
        }
        return imgUrl;
    }


  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值