动态定制Tree右键菜单

环境:Dojo 0.4

以下是核心代码,主要是是扩展了dojo.widget.TreeNodeV3,当然你也可以使用dojo.widget.TreeNode,方法一样,找到你的dojo源文件,重载一个合适的方法,将此方法copy过来进行重载方法的定义,以便动态创建节点时,根据条件设置右键菜单:

页面代码
  1. <%@ page language="java" pageEncoding="gbk"%>  
  2. <html>  
  3. <head>  
  4. <title>dojo tree</title>  
  5. <link href="${pageContext.request.contextPath}/css/css.css" rel="stylesheet" type="text/css">  
  6.   
  7. <script type="text/javascript" src="${pageContext.request.contextPath}/dojo/dojo.js"></script>  
  8. <script language="JavaScript" type="text/javascript">  
  9. dojo.require("dojo.widget.TreeV3");   
  10. dojo.require("dojo.widget.TreeNodeV3");   
  11. dojo.require("dojo.widget.TreeLoadingControllerV3");   
  12. dojo.require("dojo.widget.TreeRpcControllerV3");   
  13. dojo.require("dojo.widget.TreeSelectorV3");   
  14. dojo.require("dojo.widget.TreeDocIconExtension");   
  15. dojo.require("dojo.widget.TreeToggleOnSelect");   
  16. dojo.require("dojo.widget.TreeExpandToNodeOnSelect");   
  17. dojo.require("dojo.widget.Menu2");   
  18. dojo.require("dojo.widget.Tooltip");   
  19. dojo.require("dojo.widget.LayoutContainer");   
  20. dojo.require("dojo.widget.ContentPane");   
  21. dojo.require("dojo.widget.SplitContainer");   
  22. dojo.require("dojo.io");   
  23. dojo.require("dojo.string.common");   
  24. dojo.require("dojo.widget.TreeContextMenuV3");   
  25.   
  26. //扩展dojo.widget.TreeNodeV3类   
  27. dojo.widget.defineWidget(   
  28.     "dojo.widget.TreeNodeV3",    
  29.     dojo.widget.TreeNodeV3,    
  30.     function() {   
  31.         this.object = {};   
  32.     },   
  33.        
  34.        
  35.     {   
  36.     //====================   
  37.     //重载原有方法,获得相关属性,控制右键菜单项   
  38.     buildRendering: function(args, fragment, parent) {   
  39.         if (args.tree) {   
  40.             this.tree = dojo.lang.isString(args.tree) ? dojo.widget.manager.getWidgetById(args.tree) : args.tree;              
  41.         } else if (parent && parent.tree) {   
  42.             this.tree = parent.tree;   
  43.         }    
  44.         if (!this.tree) {   
  45.             dojo.raise("Can't evaluate tree from arguments or parent");   
  46.         }   
  47.         thisthis.domNode = this.tree.nodeTemplate.cloneNode(true);   
  48.         thisthis.expandNode = this.domNode.firstChild;   
  49.         thisthis.contentNode = this.domNode.childNodes[1];   
  50.         thisthis.labelNode = this.contentNode.firstChild;   
  51.         if (this.labelClass) {   
  52.             dojo.html.addClass(this.labelNode, this.labelClass);   
  53.         }   
  54.         if (this.contentClass) {   
  55.             dojo.html.addClass(this.contentNode, this.contentClass);   
  56.         }   
  57.         thisthis.domNode.widgetId = this.widgetId;   
  58.         thisthis.labelNode.innerHTML = this.title;   
  59.         //设置不可预览的节点   
  60.         if(this.isFolder || (this.nodeDocType && !(this.nodeDocType=='datasource' || this.nodeDocType=='sql'))){   
  61.             this.actionsDisabled = ['preview'];   
  62.         }   
  63.     }   
  64.     //======================   
  65.     }   
  66. );   
  67. dojo.hostenv.writeIncludes();   
  68.   
  69. //......others   
  70. </script>  
  71. <body>  
  72. ......   
  73. <div dojoType="TreeContextMenuV3" toggle="explode" contextMenuForWindow="false" widgetId="treeContextMenu">  
  74.     <div dojoType="TreeMenuItemV3" treeActions="addChild" iconSrc="../images/add.gif" caption="新建" widgetId="treeContextMenuCreate"></div>  
  75.     <div dojoType="TreeMenuItemV3" treeActions="edit" iconSrc="../images/edit.gif"    caption="编辑" widgetId="treeContextMenuEdit"></div>  
  76.     <div dojoType="TreeMenuItemV3" treeActions="remove" iconSrc="../images/del.gif"    caption="删除" widgetId="treeContextMenuRemove"></div>  
  77.     <div dojoType="TreeMenuItemV3" treeActions="preview" iconSrc="../images/preview.gif"    caption="预览" widgetId="treeContextMenuPreview"></div>              
  78. </div>     
  79. ......   
  80. </body>  
  81. </html>  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值