miniUI treeGrid 新增后加载数据定位到 新增的节点 的问题

mac2025-09-14  10

      一个月没写了,这次一次写了三个帖子

好了,这个新增后,定位到新增节点的问题我也做了好久 首先,最重要要注意的点:       a.用加载数据前的节点 去操作 重新加载数据后的节点,是没有效果的       b.一定要等其数据加载完后 再去操作其节点才有效果 所以整体的思路就是:

记住新增节点的标识,然后去与数据加载完后的节点中的标识    (连同表节点标识,因为一般其节点的父节点标识一般会填在其节点的字段中,只有这样才会确定节点的父子关系)    进行比对,重新找到其节点,然后再操作其节点

1. 以前我做过的树节点,树只有level三级(-1,0,1) 所以我就写两个循环就解决问题了 首先获取根节点(有且仅有一个),然后用父节点标识找到父节点,然后循环父节点下面的子节点,然后循环子节点,然后通过节点标识,找到此标识 如下部分代码:

var parentId = data["SUPER_TYPE_ID"]; var id = data["BUSI_TYPE_ID"]; var level = data["level"]; var rootNode = JsVar["ruleTree"].getRootNode(); for (var i=0;i<parent["children"].length;i++){ var parentNode1 = parent["children"][i]; var nowLevel = JsVar["ruleTree"].getLevel(parentNode1); if(level-1 == nowLevel){ if(parentNode1["ID"] == parentId){ for(var i=0;i<parentNode1["children"].length;i++){//找到刷新后的同一个子节点 var node = parentNode1["children"][i]; if(node["ID"] == id){ // JsVar["ruleTree"].expandNode(parentNode); JsVar["ruleTree"].expandPath(node); JsVar["ruleTree"].selectNode(node); JsVar["ruleTree"].scrollIntoView(node); JsVar["expandData"] = null; return; } } } } }

2. 看懂一个就好说了,若此树有多个层级,level(-1,0,1,2,3…)等等三个等级以上,仔细思考一下,其实每个节点都是相同的找法,无非是再深下去,level+1,子节点当成父节点,孙节点变成子节点,遍历查找,递归思想,所以:

/** * 选取节点 */ function expandSelectNode() { if(JsVar["expandData"] == null){ return; } var data = JsVar["expandData"]; var parentId = data["SUPER_TYPE_ID"]; var id = data["BUSI_TYPE_ID"]; var level = data["level"]; var rootNode = JsVar["ruleTree"].getRootNode(); selectNodeByLevel(rootNode,id,parentId,level); } /** * 定位选取的节点 递归 */ function selectNodeByLevel(parent,id,parentId,level) { for (var i=0;i<parent["children"].length;i++){ var parentNode1 = parent["children"][i]; var nowLevel = JsVar["ruleTree"].getLevel(parentNode1); if(level-1 == nowLevel){ if(parentNode1["ID"] == parentId){ for(var i=0;i<parentNode1["children"].length;i++){//找到刷新后的同一个子节点 var node = parentNode1["children"][i]; if(node["ID"] == id){ // JsVar["ruleTree"].expandNode(parentNode); JsVar["ruleTree"].expandPath(node); JsVar["ruleTree"].selectNode(node); JsVar["ruleTree"].scrollIntoView(node); JsVar["expandData"] = null; return; } } } }else { selectNodeByLevel(parentNode1,id,parentId,level); } } }

再啰嗦一句,重要的事情在说一遍: 最重要要注意的点:      a.用加载数据前的节点 去操作 重新加载数据后的节点,是没有效果的      b.一定要等其数据加载完后 再去操作其节点才有效果 好了 就这样,若你们还有更加优化的方法,可以一起交流咯!

最新回复(0)