主要方法有两个:其一,buildMenu方法是依附于domNode创建可用的菜单项(dijit.Menu);其二, resetMenuByLevel 方法是根据不同业务,辅以必要的逻辑判断来展示不同的菜单项,即对菜单项进行处理。这里还有一个重要的技术:dojo.aspect的使用,使得我们可以横向管理菜单,并且aspect.before(pMenu,"_openMyself",dojo.hitch(this,function(e){})这段代码,使得在菜单(openMyself)显示之前会进行这样一个function方法。
想必,以上几个点连起来,就可以实现我开头说的那个要求。
_buildMenu : function() { var pMenu = new dijit.Menu({ //指定菜单项需要依附的dom节点 targetNodeIds : [ this.editClasstree.domNode ],refocus : false }); //将菜单项和dom节点绑定 pMenu.bindDomNode(this.editClasstree.domNode); var aspect = dojo["require"]("dojo.aspect"); var repository = ecmwdgt.workspace.get("activeRepository"); aspect.before(pMenu,function(e){ var treeNode = this.editClasstree.workTree.selectednode; this.resetMenuByLevel(treeNode); })); this.connect(pMenu,function(event) { this._rightSelectTreeNode = this.editClasstree.workTree.selectedItem; }); var createClassDef = new dijit.MenuItem({ id: this.id + ecmwdgt.getBean("uuid").generate()+"_createClassDef",label : dojo.string.substitute(this.resourceBundle.createClassDef,[this.typeRes]),onClick : dojo.hitch(this,this.createClassDef) }); pMenu.addChild(createClassDef); pMenu.startup(); this.treeMenu = pMenu; },resetMenuByLevel : function(treeNode){ //treeItem,为当前选中tree节点,可以由此拿到节点数据 var treeItem = treeNode.item; //拿到当前菜单对象的所有子节点 var menuItems = this.treeMenu.getChildren(); // 以下可进行逻辑处理操作,云云。 },
如下图,为示例图:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。