深入剖析ExtJS 2.2实现及应用连载(7):页面布局

2.3登录页面

深入剖析ExtJS 2.2实现及应用连载  版权所有,谢绝转载  作者:彭仁夔 QQ546711211


登录页面是每个B/S系统都必不可的页面,只要登录之后才能进行系统中的操作。它也是一个系统的门面,优雅美观的登录页面也会给用户的良好的体验感觉,我们的办公系统最终的登录页面的效果如下:

2008120812354346.jpg

                 2.2 登录页面

   为了实现这样的页面,我们首先得建立一个default.html文件,用它来做为默认的项目首页。因为我们在这里是要采用Ext的方式来实现,所以在页面的头文件中得加上Ext的文件引用。如下代码:

代码清单2.1                                                       default.html

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<link rel="stylesheet" type="text/css"

href="extjs/resources/css/ext-all.css" />

<script type="text/javascript"

src="extjs/adapter/ext/ext-base.js"/></script>

<script type="text/javascript" src="extjs/ext-all-debug.js"></script>

<script type="text/javascript" src="javascript/Login.js"></script>

<title>第二章 办公系统登录例子</title>

</head>

<body></body>

</html>

在这里,我们得引用其CSS样式文件,对于其JS文件,要分成两个部分来引用,一个是其ext-base文件,它是ext的基础文件,这一部分可以别的适配器来代替的,如jquery.jsext-jquery-adapter.js这个两个文件就可以代替ext-base来完成让整个Ext建立在jquery的基础之上,接下来就是ext-all文件,在这里我们引用其调试文件,方便调试用,在实际应用中,我们就直接引用ext-all.js文件。

接下来,我们看到一个Login.js文件,这个文件是我们实现登录页面自已实现的代码。对于自己开发的代码,是一定要在整个Ext文件完成运行或其Dom元素也已经载入的时候,才能运行自行开发的代码。也就是Login.js中要通过Ext.onReady()来作为自行代码的入口。Ext.onReady的参数是函数。我们要实现的就是这个函数参数。

一般来说,对于一个Ext的系统入口函数,都应用初始化其传输的编码方式、状态管理、Tip提示。尽管这编码方式是有默认的,但是为了统一起来,还是声明比较好一点,对于状态管理,Tip提示,很多组件都会用到它们,不初始化不会出错,但是有的功能是实现不了,最好还是初始化它们。我们来实现:

代码清单2.2                                                          Login.js

Ext.BLANK_IMAGE_URL = 'pic/blank.gif';

var login = function() {

    Ext.QuickTips.init();

    Ext.lib.Ajax.defaultPostHeader += ";charset=utf-8";

    Ext.state.Manager.setProvider(new Ext.state.CookieProvider());

   

//实现具体的功能

};

Ext.onReady(login);

在上面的代码中,我们重新指定了Ext.BLANK_IMAGE_URL的图片的地址,其默认是http://extjs.com/blank.gif。这依赖于网络。我们一般都是把这个图片下载到本地来,这里就存放在pic的文件夹中。

接下的代码就是实现login函数。在这个函数中完成三个最基本的操作。第一Tip提示的初始化工作,第二是把Ajax的传输方式都统一为了utf-8编码,如果没有设定这里,可能会出现编码问题,这个和web.xmlutf-8的编码方式是统一起来,一个是传到服务器的编码,一是传到客户端的编码。第三是状态管理,这里采用了cookie的状态管理方式,也就是一些状态的数据保存在cookie中。

到现在为止,页面的初步工作已经完成。接着要做的就是如何去实现上图的布局和样式。下一节进行分析。     

2.2.1页面布局

假如美工给了我们于如图2.2的登录页面的图片,那么我们如何把它去布局到网页中去。首先要做的当然是切图,怎么去切分图片呢?按着正常的网页中的实现,都会把它分成上、下、中左、中右四个部分来进行切图。之后把这四个部分拼凑组装起来。组装的方式一般有二种,一是采用table布局,一种是采用div+CSS布局。对于table布局,我可以采用如下的方式:<table border="0">

  <tr>  <td colspan="2">top图片</td> </tr>

  <tr>  <td>left图片</td> <td>form表单</td> </tr>

  <tr>  <td colspan="2">button图处</td>  </tr>

</table>

这是传统的布局方式,而div+CSS的布局也是很流行的方式,看一下CSS如何布局:

<div>

 <div id='toppic'></div>

   <div id='leftpic' style="clear:right;"></div>

   <div id='form' style="float:left"></div>

 <div id='buttonpic'></div>

</div>

对于上面的div+CSS的布局,我们要通过style的样式精确地确定其每个div的宽高,之后通过浮动的方式来实现文档的布局。表格布局对于像这样的拼凑图片是很麻烦的,因为要要做到图片之间没有间隙。DIV+CSS的布局则是浏览器兼容性不好,同时在样式上的调整也很复杂。下面我们就通过Ext的布局来实现它。

网页中布局是很重要的一部分,对于布局,它不像tablediv一样,要手动去布局,它专门提供了这方面的实现,它提供了几种布局,对于如上图的上,下,中左,中右四个部分的布局,我们可以采用它的border布局。

Border布局把一个面板分成上、下,左、中、右五个部分,如果没有指定其中的某一些部分,它相邻的部分就会扩展去占据其没有指定的部分,但是其中间部分是必不可少的,对于上图4个部分,我们可以采用省去Border布局中右部分来实现。

布局的功能是集成在Panel类中,我们通过都是通过使用其Panel类或子类来实现页面的相关布局。在实现布局之前,我们要在default.html文件的body中加上一个div块:<div id='loginpanel' ></div>用来呈现的panel生成的元素。我们按如下代码实现布局:

代码清单2.3                                                 login.js 布局片断

var panel = new Ext.Panel( {                             

       renderTo : 'loginpanel',                          

       layout : "border",                                 

       width : 525,

       height : 290,

       defaults:{border : false},                       

       items : [ {                                         

           region : "north",          

           height : 56,

           html : '<img src="pic/head.gif"/>'

       }, {                                            

           region : "south",

           height : 56,

           html : '<img src="pic/foot.gif"/>'

       }, {                                           

           region : "west",        

           width : 253,

           html : '<img src="pic/left.gif"/>'

       }, {                                          

           region : "center",

           html : '<img src="pic/form.gif"/>'

       }]

    });

这一段代码我们放在代码2.2中的注释部分下面,面板的布局有二个重要的配置项,一个在③处的layout用来指定布局方式,我们指定其为border的布局。对于布局的子项则通过其配置项items来完成,它是一个数组,用来存放布局中的子项。其中每个子项中都要一有一个region配置项指定它在面板的什么位置,有五种位置的选择:northsouthwesteastcenter

指定完在布局方式,我们接着要指定面板及各个子项的宽高。③处widthheigth指定整个面板的宽高。对于面板的子项,其northsouth会直接采用面板宽度,不要指定,但是要指定其高度。对于中间的westeast我们不要指定其高度。而是要指定宽端。高度会自动计算出来。对于center,我们宽高都要不指定了。也会自动计算的。

这样面板的效果就出来了,但是我们会发现多每个子项边上都会有边线分隔。因为其默认是采用有边框,像表格一样。我们可能通过④来指定每个子项的边框都为无。这样就达到图2.2中效果。

但是现在整个面板并不是呈现在网页的中正中间,而是网页的开始。那么我们就要让它显示在网页中中间。Ext.get('loginpanel').center(Ext.getBody());是找到id'loginpanel'div,然后让它在body中居中。这个居中只能把垂直居中,也就是面板在左边的中间。原因是loginpanel'div并不是绝对定位,它会占有文档流,所以移不动,我们采用如下的代码:

Ext.get('loginpanel').setStyle('position', 'absolute')

                        .center(Ext.getBody());

先让它的定位方式为绝对定位,这里是通过代码来指定,我们也可以在divstyle中直接指定。现在就达到了我们所要的效果。但是form部分只是图片,在下面一节中,我们把这个图片换成form元素。

 

深入剖析 ExtJS 2.2 实现及应用连载   版权所有,谢绝转载   作者:彭仁夔 QQ 546711211

转载于:https://www.cnblogs.com/jxnuprk/archive/2008/12/08/1350244.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值