对于Dojo中tree的例子,我也介绍过一些了,有创建复杂tree的,有增加右键菜单项的,有处理节点拖拽的,有响应节点单(双)击的,等等。
客户说,他们要树上面尽可能多的展现多维信息,于是我弄了个TreeGrid给他们show过之后,满意了。但是层级结构有不那么明显,反而长成了DataGrid的样子。经过几次修改,还是采用Tree来构造这么一个多维信息树。
如下图,在节点处增加了各自的状态信息,并标以不同的颜色用于区分。并增加了右键操作,让结构更加紧凑一些。
可以在这个树上面对制度进行快捷的右键操作,并可以通过点击节点来查看其详情信息(页面为左右结构,左侧为树形结构,右侧围制度详情信息页面)。
从这棵树的样子上,可以猜到我是如何加上变色状态位的。在tree的onOpen属性方法中做文章,修改css样式就可以。
页面代码:
js代码: this.workTree = new dijit.Tree({ model : this.workModel, openOnClick : false, onOpen : function(event){ //处理 节点的状态 if(event.children == undefined ){ return; } var children = event.children; for ( var i = 0; i < children.length; i++) { var item = children[i]; var tNode = this.getNodesByItem(item); var status = this.model.store.getValue(item,"status"); if(status != null){ //定义属性颜色组合 var statusClassMap = { "已发布" : "Released", "未申请" : "Unapply", "已申请" : "Applied", "已编制" : "Documented", "已撤销" : "Withdrawn" }; if((tNode = tNode[0])){ if((tNode.labelNode.innerHTML.indexOf("<span class") != -1) || (tNode.labelNode.innerHTML.indexOf("<SPAN class") != -1)){ //从浏览器兼容性考虑,在IE8下<span>标签为大写<SPAN> return ; } var colorHtml = []; colorHtml.push("<span class='"); colorHtml.push(statusClassMap[status] || ""); colorHtml.push("' >"); colorHtml.push(" " + status); colorHtml.push("</span>"); tNode.labelNode.innerHTML = tNode.labelNode.innerHTML + colorHtml.join(""); } } } console.dir(["_onRetrieveTag_event",event]); }, onClick : dojo.hitch(this, this._onClickItem), onDblClick : dojo.hitch(this, this._onDbClickItem), persist : false });
css代码
css代码: .ecmStandardRuleStructureManage .dijitTreeLabel .Released{ color : blue; } .ecmStandardRuleStructureManage .dijitTreeLabel .Unapply{ color: red; } .ecmStandardRuleStructureManage .dijitTreeLabel .Applied{ color: orange; } .ecmStandardRuleStructureManage .dijitTreeLabel .Documented{ color: green; } .ecmStandardRuleStructureManage .dijitTreeLabel .Withdrawn{ color: black; }