Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 777|回复: 0

ExtJs4.2中Tab选项卡的右击关闭其它和关闭当前功能不准确的解决方法

[复制链接]
  • TA的每日心情
    奋斗
    2024-11-24 15:47
  • 签到天数: 804 天

    [LV.10]以坛为家III

    2053

    主题

    2111

    帖子

    72万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    726782
    发表于 2021-9-3 10:30:42 | 显示全部楼层 |阅读模式

    一、ExtJs4.2中Tab选项卡的右击关闭其它和关闭当前功能不准确的解决方法

     

    二、找到ux目录下的TabCloseMenu.js文件,将内容替换成下面代码。

    三、代码:

    /** 
     * Plugin 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. 
     */
    Ext.define('Ext.ux.TabCloseMenu', {
        alias: 'plugin.tabclosemenu',
    
        mixins: {
            observable: 'Ext.util.Observable'
        },
    
        /** 
         * @cfg {String} closeTabText 
         * The text for closing the current tab. 
         */
        closeTabText: 'Close Tab',
        showCloseOthers: true,
        closeOthersTabsText: 'Close Other Tabs',
    
        /** 
         * @cfg {Boolean} showCloseAll 
         * Indicates whether to show the 'Close All' option. 
         */
        showCloseAll: true,
        closeAllTabsText: 'Close All Tabs',
    
        /** 
         * @cfg {Array} extraItemsHead 
         * An array of additional context menu items to add to the front of the context menu. 
         */
        extraItemsHead: null,
    
        /** 
         * @cfg {Array} extraItemsTail 
         * An array of additional context menu items to add to the end of the context menu. 
         */
        extraItemsTail: null,
    
        //public  
        constructor: function (config) {
            this.addEvents(
                'aftermenu',
                'beforemenu');
    
            this.mixins.observable.constructor.call(this, config);
        },
    
        init: function (tabpanel) {
            this.tabPanel = tabpanel;
            this.tabBar = tabpanel.down("tabbar");
    
            this.mon(this.tabPanel, {
                scope: this,
                afterlayout: this.onAfterLayout,
                single: true
            });
        },
    
        onAfterLayout: function () {
            this.mon(this.tabBar.el, {
                scope: this,
                contextmenu: this.onContextMenu,
                delegate: '.x-tab'
            });
        },
    
        onBeforeDestroy: function () {
            Ext.destroy(this.menu);
            this.callParent(arguments);
        },
    
        // private  
        onContextMenu: function (event, target) {
            var me = this,
                menu = me.createMenu(),
                disableAll = true,
                disableOthers = true,
                tab = me.tabBar.getChildByElement(target),
                index = me.tabBar.items.indexOf(tab);
    
            this.item = me.tabPanel.getComponent(index);
            me.selectedTab = me.tabPanel.getComponent(index);
            menu.child('*[text="' + me.closeTabText + '"]').setDisabled(!me.item.closable);
    
            if (me.showCloseAll || me.showCloseOthers) {
                me.tabPanel.items.each(function (item) {
                    if (item.closable) {
                        disableAll = false;
                        if (item != me.item) {
                            disableOthers = false;
                            return false;
                        }
                    }
                    return true;
                });
    
                if (me.showCloseAll) {
                    menu.child('*[text="' + me.closeAllTabsText + '"]').setDisabled(disableAll);
                }
    
                if (me.showCloseOthers) {
                    menu.child('*[text="' + me.closeOthersTabsText + '"]').setDisabled(disableOthers);
                }
            }
    
            event.preventDefault();
            me.fireEvent('beforemenu', menu, me.item, me);
    
            menu.showAt(event.getXY());
        },
    
        createMenu: function () {
            var me = this;
    
            if (!me.menu) {
                var items = [{
                    text: me.closeTabText,
                    scope: me,
                    handler: me.onClose
                }];
    
                if (me.showCloseAll || me.showCloseOthers) {
                    items.push('-');
                }
    
                if (me.showCloseOthers) {
                    items.push({
                        text: me.closeOthersTabsText,
                        scope: me,
                        handler: me.onCloseOthers
                    });
                }
    
                if (me.showCloseAll) {
                    items.push({
                        text: me.closeAllTabsText,
                        scope: me,
                        handler: me.onCloseAll
                    });
                }
    
                if (me.extraItemsHead) {
                    items = me.extraItemsHead.concat(items);
                }
    
                if (me.extraItemsTail) {
                    items = items.concat(me.extraItemsTail);
                }
    
                me.menu = Ext.create('Ext.menu.Menu', {
                    items: items,
                    listeners: {
                        hide: me.onHideMenu,
                        scope: me
                    }
                });
            }
    
            return me.menu;
        },
    
        onHideMenu: function () {
            var me = this;
    
            me.item = null;
            me.fireEvent('aftermenu', me.menu, me);
        },
    
        onClose: function () {
            this.tabPanel.remove(this.selectedTab);
        },
    
        onCloseOthers: function () {
            this.doClose(true);
        },
    
        onCloseAll: function () {
            this.doClose(false);
        },
    
        doClose: function (excludeActive) {
            var items = [];
    
            this.tabPanel.items.each(function (item) {
                if (item.closable) {
                    if (!excludeActive || item != this.selectedTab) {
                        items.push(item);
                    }
                }
            }, this);
    
            Ext.each(items, function (item) {
                this.tabPanel.remove(item);
            }, this);
        }
    });  

     

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-12-22 01:04 , Processed in 0.055609 second(s), 28 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表