欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

2020-11-05 关于前端‘古董‘dojo的树结构如何默认展开根节点

程序员文章站 2022-05-24 18:12:57
...

在工作中对公司的老平台进行维护中遇到了统一平台选择区域树样式统一的问题,自己在网上搜索了好多但也没有找到合适的方法,直到找公司前辈请教后解决了这个问题。这里就把这个比较久远的前端问题和大家分享一下:

原代码:

	model = new dijit.tree.ForestStoreModel({
			store: store, 
			deferItemLoadingUntilExpand: true,
			childrenAttrs: ["items"], 
			query: ""
		});	
		this.treeObjes = new dijit.Tree({
			model: model,
			persist: false,
			showRoot: false,
			getIconClass: basis.getIconClass_treeObjes, 
			style: "overflow-x:auto;overflow-y:auto;height:100%;"
		}, node);
		dojo.connect(this.treeObjes, "onDblClick", this, this.onDblClick_treeObjs_Asyn);

修改后的代码:

model = new dijit.tree.ForestStoreModel({
			store: store, 
			deferItemLoadingUntilExpand: true,
			childrenAttrs: ["items"], 
			query: ""
		});
		this.treeObjes = new dijit.Tree({
			model: model,
			persist: false,
			showRoot: false,
			getIconClass: basis.getIconClass_treeObjes, 
			style: "overflow-x:auto;overflow-y:auto;height:100%;"
		}, node);
		// 默认展开树结构第一层节点 
		this._timerRootFlag = setInterval(dojo.hitch(this,function(){// 自动展开第一层
			if(!this.treeObjes._getRootOrFirstNode()){
				return;
			}
			this.treeObjes._expandNode(this.treeObjes._getRootOrFirstNode());
			clearInterval(this._timerRootFlag);
			this._timerRootFlag = null;
		}), 500);
		dojo.connect(this.treeObjes, "onDblClick", this, this.onDblClick_treeObjs_Asyn);

这里的this._timerRootFlag使用了一个定时器(捡了个现成的定时器来用,所以代码量多出来了一行)来完成页面加载了树结构后,在触发器的时间走完之后进行这个根节点展开方法的执行,不过其中最主要的一段代码还是这个:

this.treeObjes._expandNode(this.treeObjes._getRootOrFirstNode());

对于树的根节点进行展开操作,不过这个问题自己没有解决的根本问题还是自己比较懒。想到去看dojo接口API文件中的详细方法属性,却只是粗略的看了一遍,没有看完,如果仔细的话,应该就没有这个问题了。所以下次再找不到解决方案的时候可以仔细去研读一下当前操作对象的详细文档,读一下后端会有更多的启发。

更多内容可以去看这位老哥写的dojo中tree的使用心得,链接:https://blog.csdn.net/huyanliang/article/details/46669943?biz_id=102&utm_term=dojo%E6%A0%91%E7%BB%93%E6%9E%84&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduweb~default-1-46669943&spm=1018.2118.3001.4449

相关标签: dojo笔记 dojo