当前位置:编程学习 > JS >>

[Ext JS 4] 布局之实战一 - 中间区块不会自动伸展 (tab)

问题描述
看到一个Ext 布局的实例问题,当点击左边的收合时,中间的区块并不会自动的填充余下的页面,导致右边留下一段空白。点击一下tab 就正常了。
分析了一下,使用的是Ext 的border 进行布局,有north、 west和center 三个区块。north 和west 都很简单,导致问题的应该是center 区块。
这个center 区块的写法时: 使用contentEl 指定一个div, 然后创建一个 Ext tab 的Component 来renderTo 到这个div, 简化的代码如下:
[javascript]  
<!--Add by oscar999-->  
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">  
<HTML>  
<HEAD>  
<TITLE> New Document </TITLE>  
<META NAME="Author" CONTENT="oscar999">  
<script>  
Ext.onReady(function() {  
  var viewport = Ext.create('Ext.Viewport', {  
        layout: {  
            type: 'border',  
            padding: 0            
        },  
        defaults: {  
            split: true  
        },  
        items: [  
        {  
            region: 'north',  
            contentEl: 'headerdiv'            
        },{           
            region: 'west',  
            contentEl: 'westdiv'               
        },{  
            region: 'center',  
            contentEl: 'centerdiv'    
        }  
        ]  
    });  
  
    Ext.create('Ext.tab.Panel', {  
            activeTab: 0,     // first tab initially active  
            renderTo: 'maintabs',  
            items: [{  
                html 'center1',  
                title: 'Close Me',  
                closable: true,  
                autoScroll: true  
            }, {  
                html: 'center2',  
                title: 'Center Panel',  
                autoScroll: true  
            }]  
    });  
  
});  
</script>  
</HEAD>  
  
<BODY>  
<div id="headerdiv"></div>  
<div id="westdiv"></div>  
<div id="centerdiv"></div>  
</BODY>  
</HTML>  
 
问题分析与解决
问题就出在center的处理上,
参考这篇
[Ext JS 4] contentEL,renderTo, applyTo 释义与区别
有这句 “ 使用contentEl这个HTML元素不会参与组件使用的布局方案”, 所以通过contentEl 添加的center 区块,在layout 时就会出现问题。
解决方式如下就可以了:
[javascript] 
 var viewport = Ext.create('Ext.Viewport', {  
       layout: {  
           type: 'border',  
           padding: 0             
       },  
       defaults: {  
           split: true  
       },  
       items: [  
       {  
           region: 'north',  
           contentEl: 'headerdiv'             
       },{            
           region: 'west',  
        contentEl: 'westdiv'               
       },Ext.create('Ext.tab.Panel', {  
           activeTab: 0,     // first tab initially active  
           region: 'center',  
           items: [{  
               html 'center1',  
               title: 'Close Me',  
               closable: true,  
               autoScroll: true  
           }, {  
               html: 'center2',  
               title: 'Center Panel',  
               autoScroll: true  
           }]  
         })  
    ]  
});  
 
 
延生考虑
Ext JS的SDK包的 examples\layout目录下有一个complex.html的例子就是用来演示布局的,是否按照以上错误的写法,也会出现这个问题。
试了一下,果不其然, 以下贴出错误改动的代码。
[javascript]  
<html>  
<head>  
<title>Complex Layout</title>  
  
    <!-- GC -->  
  
<style type="text/css">  
p {  
    margin:5px;  
}  
.settings {  
    background-image:url(../shared/icons/fam/folder_wrench.png);  
}  
.nav {  
    background-image:url(../shared/icons/fam/folder_go.png);  
}  
.info {  
    background-image:url(../shared/icons/fam/information.png);  
}  
</style>  
<script type="text/javascript" src=
补充:web前端 , JavaScript ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,