tab右键关闭菜单项重复

问题描述

项目中使用到ext创建tab页,想右键tab页title可以选择关闭此tab页,但是创建的menu中关闭选项有时候会出现两个我的代码如下var openInTab= function(id,node,e,url) {e.stopEvent();var tabId=id;var n = tabs.getComponent(tabId);if (!n) {var n = tabs.add({id:tabId,title: node.text,closable:true,html : '<iframe id="ifr_'+tabId+'" width="100%" height="100%" src="'+url+'"></iframe>'});}tabs.setActiveTab(n);}//生成标签页var tabs = new Ext.TabPanel({region:'center',animScroll:true,deferredRender:false,activeTab:0,resizeTabs:false, // turn on tab resizing//minTabWidth: 20,//tabWidth: 30,enableTabScroll:true,items:[ { id:'main', title: '首页', html: '<iframe id="ifr_welcome" width="100%" height="100%" src="showTask.do"></iframe>' }]});Ext.BLANK_IMAGE_URL = 'js/ext-3.0.0//resources/images/default/s.gif'Ext.onReady( function() { var viewport = new Ext.Viewport({layout:'border',items:[new Ext.BoxComponent({region:'north',el: 'north',height:72}),{region:'west',id:'west-panel',split:true,width: 200,minSize: 175,maxSize: 600,margins:'0 0 0 0',layout:'accordion',title:'系统菜单',collapsible :true,layoutConfig:{animate:true}, items: [ {title:' ',border:false,html:'<div id="tree" style="overflow:auto;width:100%;height:100%"></div>'//iconCls:'nav' }]}, tabs//初始标签页 ]}); var tree = new Ext.tree.TreePanel( {el :'tree',autoScroll:true,rootVisible:true,loader:new Ext.tree.TreeLoader({dataUrl:'menu.action'})});var root = new Ext.tree.AsyncTreeNode( {id :'0',text :'根目录',expanded:true});tree.setRootNode(root);tree.render();tree.expand();//树的单击事件tree.on('click',function(node,e){var id=node.id;if(node.isLeaf()){var url=node.attributes.url;openInTab(id,node,e,url);}});tabs.on('contextmenu',function(tabs,tab,e){if(tab.id=='main'){return false;}var position=e.getXY();e.preventDefault();var tabContextMenu = new Ext.menu.Menu({id :'tabContextMenu'});var tabId=tab.id;tabContextMenu.addItem(new Ext.menu.Item({id :'close',text :'关闭',handler : function() {tabs.remove(tabId);}}));tabContextMenu.addItem(new Ext.menu.Item({id :'closeothers',text :'关闭其他',handler : function() {var items=tabs.items;var tabCount=items.getCount();var tabIds=new Array();var j=0;for(var i=0;i<tabCount;i++){var item=items.get(i);if(item.id!=tabId&&item.id!='main'){tabIds[j]=item.id;j++;}}for(var k=0;k<tabIds.length;k++){tabs.remove(tabIds[k]);}}}));tabContextMenu.showAt(position);});});不知道是什么地方有问题 问题补充:这个插件可以直接使用吗 是在ext-all里有定义的吗

解决方案

这种情况一般是id的原因 官方已经有这个tab右键的插件了在ux包下有个 TabCloseMenu.js代码:/*! * Ext JS Library 3.2.0 * Copyright(c) 2006-2010 Ext JS, Inc. * licensing@extjs.com * http://www.extjs.com/license *//** * @class Ext.ux.TabCloseMenu * @extends Object * Plugin (ptype = 'tabclosemenu') for adding a close context menu to tabs. Note that the menu respects * the closable configuration on the tab. As such, commands like remove others and remove all will not * remove items that are not closable. * * @constructor * @param {Object} config The configuration options * @ptype tabclosemenu */Ext.ux.TabCloseMenu = Ext.extend(Object, { /** * @cfg {String} closeTabText * The text for closing the current tab. Defaults to <tt>'Close Tab'</tt>. */ closeTabText: 'Close Tab', /** * @cfg {String} closeOtherTabsText * The text for closing all tabs except the current one. Defaults to <tt>'Close Other Tabs'</tt>. */ closeOtherTabsText: 'Close Other Tabs', /** * @cfg {Boolean} showCloseAll * Indicates whether to show the 'Close All' option. Defaults to <tt>true</tt>. */ showCloseAll: true, /** * @cfg {String} closeAllTabsText * <p>The text for closing all tabs. Defaults to <tt>'Close All Tabs'</tt>. */ closeAllTabsText: 'Close All Tabs', constructor : function(config){ Ext.apply(this, config || {}); }, //public init : function(tabs){ this.tabs = tabs; tabs.on({ scope: this, contextmenu: this.onContextMenu, destroy: this.destroy }); }, destroy : function(){ Ext.destroy(this.menu); delete this.menu; delete this.tabs; delete this.active; }, // private onContextMenu : function(tabs, item, e){ this.active = item; var m = this.createMenu(), disableAll = true, disableOthers = true, closeAll = m.getComponent('closeall'); m.getComponent('close').setDisabled(!item.closable); tabs.items.each(function(){ if(this.closable){ disableAll = false; if(this != item){ disableOthers = false; return false; } } }); m.getComponent('closeothers').setDisabled(disableOthers); if(closeAll){ closeAll.setDisabled(disableAll); } e.stopEvent(); m.showAt(e.getPoint()); }, createMenu : function(){ if(!this.menu){ var items = [{ itemId: 'close', text: this.closeTabText, scope: this, handler: this.onClose }]; if(this.showCloseAll){ items.push('-'); } items.push({ itemId: 'closeothers', text: this.closeOtherTabsText, scope: this, handler: this.onCloseOthers }); if(this.showCloseAll){ items.push({ itemId: 'closeall', text: this.closeAllTabsText, scope: this, handler: this.onCloseAll }); } this.menu = new Ext.menu.Menu({ items: items }); } return this.menu; }, onClose : function(){ this.tabs.remove(this.active); }, onCloseOthers : function(){ this.doClose(true); }, onCloseAll : function(){ this.doClose(false); }, doClose : function(excludeActive){ var items = []; this.tabs.items.each(function(item){ if(item.closable){ if(!excludeActive || item != this.active){ items.push(item); } } }, this); Ext.each(items, function(item){ this.tabs.remove(item); }, this); }});Ext.preg('tabclosemenu', Ext.ux.TabCloseMenu);使用范例:tab = new Ext.TabPanel({ activeTab:0, resizeTabs:true, // turn on tab resizing minTabWidth: 115, tabWidth:135, enableTabScroll:true, items:[{ iconCls:'desk', title:"title" }], plugins: new Ext.ux.TabCloseMenu() })
解决方案二:
看到插件里面的这段代码没?createMenu : function(){ if(!this.menu){ var items = [{ itemId: 'close', text: this.closeTabText, scope: this, handler: this.onClose }]; if(this.showCloseAll){ items.push('-'); } items.push({ itemId: 'closeothers', text: this.closeOtherTabsText, scope: this, handler: this.onCloseOthers }); if(this.showCloseAll){ items.push({ itemId: 'closeall', text: this.closeAllTabsText, scope: this, handler: this.onCloseAll }); } this.menu = new Ext.menu.Menu({ items: items }); } return this.menu; }, 只是创建一次

时间: 2025-01-26 13:20:19

tab右键关闭菜单项重复的相关文章

鼠标右键多余菜单项的清理

  系统使用的时间越长,系统垃圾也会越来越多,而大量软件的安装会让你的鼠标右键菜单变得异常臃肿,常常会遭遇到右键菜单很多,找不到自己所需要的选项.为了加快我们的效率,我们有必要对系统右键菜单进行清理.鼠标右键多余菜单清理方法如下: 第一招:清理右键"新建"菜单 由于不断地安装新的应用程序,鼠标右键快捷菜单的中的"新建"菜单下的命令选项会越来越多,有时甚至需要花费一点时间去等待它们显示完全.但实际上除了新建文件夹.TXT文档等常用的选项以外,其中有许多种类型的文件我们

MyEclipse右键new菜单项的设置 及 Eclipse中各种文件不能保存中文的问题

  有时候,myeclipse右键new的时候经常出现一些ejb等文件你懂的,很是恶心~~ Window --> Customize Perspective --> Submenus --> New --> 选项 -- 看截图   Eclipse中各种文件不能保存中文的问题 Window --> Preferences --> General --> Content Types在右边的窗口中打开Text列表,选中"类型文件",在下面的"

Mac系统如何删除鼠标右键菜单的重复项目?

  我是忠实的 Mac 粉丝,我爱我的 Mac,和她相伴的时光总是美好的.但是有时候她会做出一些奇怪的事情,比如说当我在某个文件上点击右键想寻找合适的应用程序打开时,却发现她显示着一些重复的选项.虽然不影响使用,但对于我来说,这简直是要把我逼疯的节奏. 后来事实证明,该问题的解决方案是相当容易的.我们只要借助「终端」应用程序就可以了. 使用「终端」删除右键菜单重复项目 第一步:打开「终端」应用程序. 第二步:输入如下命令. /System/Library/Frameworks/CoreServi

win7右键菜单项过多怎么清理

电脑中的软件安装多了,你会发现右键菜单项过多,很多内容是我们不需要的,那该怎么清理呢,本教程为大家介绍清理方法,只需三步就能轻松搞定. 在"组织-文件夹和搜索选项"进行设置 文件夹选项选择查看选项卡 在"文件夹选项"对话框中选择"查看"选项卡,设置"显示隐藏文件.文件夹和驱动器". 在文件夹里轻松清理 在文件夹里轻松清理C:Users[用户名]AppDataRoamingMicrosoftWindowsSendTo文件夹就可以

在Flex中给datagrid添加右键菜单项的具体实现_Flex

复制代码 代码如下: <?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" crea

win7提示 计算机右键管理菜单提示文件没有与之关联的程序

win7系统:"该文件没有与之关联的程序来执行该操作.请安装一个程序,或者,如果已安装程序,请在默认程序控制面板中创建关联"报错界面如下 计算机右键管理菜单提示文件没有与之关联的程序-notepad 右键菜单关联"> 解决办法,可以使用下面的注册表进入导入来解决了 如果出现的话,现在有方法解决了.根据自己的情况,大致猜测原因是改变了桌面 快捷方式的小箭头所致!下面是我在网上搜到的解决方法,不是本人原创,解决环 境是WIN7旗舰,问题得到解决可以放心使用.担心不成功会成仁

鼠标右键多余菜单的清理

 系统使用的时间越长,系统垃圾也会越来越多,而大量软件的安装会让你的鼠标右键菜单变得异常臃肿,常常会遭遇到右键菜单很多,找不到自己所需要的选项.为了加快我们的效率,我们有必要对系统右键菜单进行清理.鼠标右键多余菜单清理方法如下: 第一招:清理右键"新建"菜单 由于不断地安装新的应用程序,鼠标右键快捷菜单的中的"新建"菜单下的命令选项会越来越多,有时甚至需要花费一点时间去等待它们显示完全.但实际上除了新建文件夹.TXT文档等常用的选项以外,其中有许多种类型的文件我们基

360浏览器右键关闭怎么取消?

  360浏览器右键关闭怎么取消?现在,不少人在使用360浏览器的时候发现,总会不小心开启360浏览器自带的右键关闭功能,造成了不少的麻烦.那么,于是到处求助,360浏览器右键关闭怎么取消?今天小编就教大家360浏览器右键关闭取消方法吧. 打开360浏览器,点击页面中的"工具",,在弹出的下拉框点击"选项"; 360浏览器右键关闭 这时候就进入到了360浏览器的"选项"设置界面了,这时候就可以看到了"鼠标手势"这一项了.进入&

360浏览器怎么取消右键关闭功能

  打开360浏览器,点击页面中的"工具",,在弹出的下拉框点击"选项"; 这时候就进入到了360浏览器的"选项"设置界面了,这时候就可以看到了"鼠标手势"这一项了.进入"鼠标手势"里面后将上面两个勾选去除即可,360浏览器会自动保存好. 退出来,重新打开360浏览器就取消了右键关闭功能.