2013-07-17 158 views
0

我們如何才能增加最大化和EXTJS 4門例的顯示屏最小化:最大化,最小化ExtJS的面板

http://docs.sencha.com/extjs/4.2.1/extjs-build/examples/portal/portal.html

完全工作代碼:

Ext.define('Ext.app.Portal', { 

    extend: 'Ext.container.Viewport', 
    requires: ['Ext.app.PortalPanel', 'Ext.app.PortalColumn', 'Ext.app.GridPortlet', 'Ext.app.ChartPortlet'], 


    initComponent: function(){ 
     var content = '<div class="portlet-content">'+Ext.example.shortBogusMarkup+'</div>'; 



     var mainColumnPanelId; 
     //var mainPanelId; 

     var itemNo=0; 

     this.tools= [ 
       { 
        type:'minimize', 
        hidden:true, 
        scope:this, 
        handler: function(e, target, panel) 
        { 
         var cardPanel=Ext.getCmp("app-portal"); 
         var c = panel.up("viewport"); 
         var maximizePortletPanel = Ext.getCmp("maximizePortletPanel"); 
         cardPanel.layout.setActiveItem(0); 
         var originalPanel=Ext.getCmp(mainColumnPanelId); 
         originalPanel.insert(itemNo,maximizePortletPanel.items.items[0]); 
         panel.tools['close'].setVisible(true); 
         panel.tools['collapse-top'].setVisible(true); 
         panel.tools['minimize'].setVisible(false); 
         panel.tools['maximize'].setVisible(true); 

        } 
       }, 
        { 
       type:'maximize', 
       scope:this, 
       handler: function(e, target, panel) 
       { 
        var cardPanel=Ext.getCmp("app-portal"); 
        var columnPanel = panel.ownerCt.ownerCt; 
        var maximizePortletPanel = Ext.getCmp("maximizePortletPanel"); 

        mainColumnPanelId=columnPanel.getId(); 
        var columnPanelItems=columnPanel.items.items; 

        for(var j=0;j<columnPanelItems.length;j++){ 
          if(columnPanelItems[j].getId()==panel.ownerCt.getId()){ 
           itemNo=j; 

           break ; 
          } 

         } 

        maximizePortletPanel.insert(0,panel.ownerCt); 
        cardPanel.layout.setActiveItem(1); 

        panel.tools['minimize'].setVisible(true); 
        panel.tools['close'].setVisible(false); 
        panel.tools['collapse-top'].setVisible(false); 
        panel.tools['maximize'].setVisible(false); 

       } 
    }]; 


     Ext.apply(this, { 
      id: 'app-viewport', 
      layout: { 
       type: 'border', 
       padding: '0 5 5 5' // pad the layout from the window edges 
      }, 
      items: [{ 
       id: 'app-header', 
       xtype: 'box', 
       region: 'north', 
       height: 40, 
       html: 'Ext Portal' 
      },{ 
       xtype: 'container', 
       region: 'center', 
       layout: 'border', 
       items: [{ 
        id: 'app-options', 
        title: 'Options', 
        region: 'west', 
        animCollapse: true, 
        width: 200, 
        minWidth: 150, 
        maxWidth: 400, 
        split: true, 
        collapsible: true, 
        layout:{ 
         type: 'accordion', 
         animate: true 
        }, 
        items: [{ 
         html: content, 
         title:'Navigation', 
         autoScroll: true, 
         border: false, 
         iconCls: 'nav' 
        },{ 
         title:'Settings', 
         html: content, 
         border: false, 
         autoScroll: true, 
         iconCls: 'settings' 
        }] 
       },{ 


        id: 'app-portal', 

        region: 'center', 
        layout:'card', 
        items:[{  

        xtype: 'portalpanel', 
        items: [{ 
         id: 'col-1', 
         items: [{ 
          id: 'portlet-1', 
          title: 'Grid Portlet', 
          tools: this.tools, 
          items: Ext.create('Ext.app.GridPortlet'), 
          listeners: { 
           'close': Ext.bind(this.onPortletClose, this) 
          } 
         },{ 
          id: 'portlet-2', 
          title: 'Portlet 2', 
          tools: this.tools, 
          html: content, 
          listeners: { 
           'close': Ext.bind(this.onPortletClose, this) 
          } 
         }] 
        },{ 
         id: 'col-2', 
         items: [{ 
          id: 'portlet-3', 
          title: 'Portlet 3', 
          tools: this.tools, 
          html: '<div class="portlet-content">'+Ext.example.bogusMarkup+'</div>', 
          listeners: { 
           'close': Ext.bind(this.onPortletClose, this) 
          } 
         }] 
        },{ 
         id: 'col-3', 
         items: [{ 
          id: 'portlet-4', 
          title: 'Stock Portlet', 
          tools: this.tools, 
          items: Ext.create('Ext.app.ChartPortlet'), 
          listeners: { 
           'close': Ext.bind(this.onPortletClose, this) 
          } 
         }] 
        }] 
          },{ //title: 'Portlet', 
          xtype:'panel', 
          id:'maximizePortletPanel', 
          layout:'fit', 
           autoScroll:true 

           //border:true, 
           //frame:true 
           }]//// 
       }]// 
      }] 
     }); 
     this.callParent(arguments); 
    }, 

    onPortletClose: function(portlet) { 
     this.showMsg('"' + portlet.title + '" was removed'); 
    }, 

    showMsg: function(msg) { 
     var el = Ext.get('app-msg'), 
      msgId = Ext.id(); 

     this.msgId = msgId; 
     el.update(msg).show(); 

     Ext.defer(this.clearMsg, 3000, this, [msgId]); 
    }, 

    clearMsg: function(msgId) { 
     if (msgId === this.msgId) { 
      Ext.get('app-msg').hide(); 
     } 
    } 
}); 

回答

3

你不能 '最大化' 或'最小化''視口',因爲它自動渲染到body,如果你想使用最大化/最小化功能,你必須使用Window這是更好的方法。

視口使自身到文檔正文,並自動 尺寸本身瀏覽器窗口的大小並管理窗口 調整大小。可能只有一個Viewport在頁面中創建。

參見:http://docs.sencha.com/extjs/4.2.1/#!/api/Ext.container.Viewport

但是,如果你想最大化視口內部的一些面板應該使用每個面板的showBy方法與目標組件指定的大小來顯示它。

請參見:http://docs.sencha.com/extjs/4.2.1/#!/api/Ext.window.Window-method-showBy

+0

謝謝,順便說一句,我知道了新的東西,我們可以添加面板上面板提供的父母應該是'浮動:真正'..冷卻..任何其他方式做到這一點? – agpt

+0

你能提供更多細節嗎?您可以嘗試https://fiddle.sencha.com/來舉例說明您的代碼或您想要的東西。 –

0

可以按下面板項目內窗口。然後使用工具[tbar in extjs]提供最大化和最小化功能。