• ExtJS 4 在Ext.tab.Panel中使用Ext.ux.IFrame打开url指向的网页


    ext-4.2.1.883examplesuxIFrame.js

    ext-4.2.1.883examplesuxTabCloseMenu.js

    复制到

    Scriptsext-4.2.1.883srcux

    Ext.require('Ext.ux.IFrame');
    Ext.define('Web.TabPanel',
        {
            extend: 'Ext.tab.Panel',
            AddNewTab: function (title, url) {
                var tab = Ext.getCmp(url);
                if (tab) {
                    this.setActiveTab(tab);
                } else {
                    var p = Ext.create("Ext.ux.IFrame",
                    {
                        id: url,
                        title: title,
                        padding: 10,
                        src: url,
                        loadMask: '页面加载中...',
                        closable: true
                    });
                    var panel = this.add(p);
                    this.setActiveTab(panel);
                }
            },
            plugins: Ext.create('Ext.ux.TabCloseMenu', {
                closeTabText: '关闭面板',
                closeOthersTabsText: '关闭其他',
                closeAllTabsText: '关闭所有'
            })
            });
     var myTabPanel = Ext.create('Web.TabPanel',
        {
            activeTab: 1,
            border: 0,
            layout: 'fit',
            items: [
                {
                    title: '首页',
                    border: 0,
                    padding: 10,
                    layout: 'fit',
                    html: '<h5>Welcome!</h5>'
                }
            ]
        });
     
     
     
     
    TreePanelData.json
     
     
    {
      "children": [
        {
          "text": "系統設定",
          "expanded": true,
          "children": [
            {
              "text": "目錄",
              "expanded": true,
              "children": [
                {
                  "text": "模板目錄",
                  "leaf": true,
                  "url": "Pages/Cfg/Category/Template/Default.html"
                },
                {
                  "text": "套裝目錄",
                  "leaf": true,
                  "url": "Pages/Cfg/Category/Suit/Default.html"
                }
              ]
            },
    ...
     
     
     
    var treeStore = Ext.create('Ext.data.TreeStore', {
            autoLoad: true,
            proxy: {
                type: 'ajax',
                url: 'TreePanelData.json',
                reader: {
                    type: 'json',
                    root: 'children'
                }
            },
            root: {
                nodeType: 'async',
                text: 'Ext JS',
                expanded: true
            }
        });

    var treePanel = Ext.create('Ext.tree.Panel',
        {
            rootVisible: false,
            store: treeStore,
            animate: false,
            listeners: {
                itemclick: function(thisTree, record, item, index, e, options) {
                    var url = record.raw.url;
                    if (!url) return;
                    myTabPanel.AddNewTab(record.raw.text, url);
                }
            }
        });

    tabpanel 右键菜单:

    plugins: new Ext.create('Ext.ux.TabCloseMenu',{
    
                                        closeTabText: '关闭面板',
    
                                        closeOthersTabsText: '关闭其他',
    
                                        closeAllTabsText: '关闭所有'
    
                                    })
     
     

    修改【Ext.ui.TabCloseMenu】

    修改一下方法:

    onContextMenu

    onClose

    doClose

    /**
     * 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',
        /**
         * @cfg {Boolean} showCloseOthers
         * Indicates whether to show the 'Close Others' option.
         */
        showCloseOthers: true,
        /**
         * @cfg {String} closeOthersTabsText
         * The text for closing all tabs except the current one.
         */
        closeOthersTabsText: 'Close Other Tabs',
        /**
         * @cfg {Boolean} showCloseAll
         * Indicates whether to show the 'Close All' option.
         */
        showCloseAll: true,
        /**
         * @cfg {String} closeAllTabsText
         * The text for closing all tabs.
         */
        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);
            me.item = me.tabPanel.getComponent(index);
            me.ctab=me.item;
            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.item);
            this.tabPanel.remove(this.ctab);
        },
        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.item){
                        items.push(item);
                    }*/
                    if(!excludeActive || item != this.ctab){
                        items.push(item);
                    }
                }
            }, this);
            Ext.each(items, function(item){
                this.tabPanel.remove(item);
            }, this);
        }
    });
  • 相关阅读:
    去掉[]中的英文字符
    Python面向对象OOP
    Python内置模块
    Python面向对象
    Python文件操作
    Python元组数据类型详解
    Jenkins+postman发送邮件测试报告及附件
    Python列表数据类型详解
    Python面向对象高阶描述符与设计魔术方法
    Python字典数据类型详解
  • 原文地址:https://www.cnblogs.com/CodingArt/p/6202202.html
Copyright © 2020-2023  润新知