dojo界面布局初体验
使用dojo的布局控件,可以快速搭建界面,今天刚好研究了一下,中间遇到很崩溃的问题,还好最后解决了。
一、dojo布局控件概述
dojo中最基本的布局控件应该是BorderContainer了,他应该作为<body></body>中的第一个元素。BorderContainer可以作为其他常用布局控件的容器(如AccordionContainer、ContentPane、TabContainer、StackContainer、SplitContainer),最多可以容纳5个其他的布局控件(也可以再次容纳BorderContainer以便嵌套使用)。这5个布局控件分布占据:top、bottom、left、right、center的位置,他们的排列有两种方式:headline(3行,其中第一行是top,第三行是bottom,第二行则是left、center和right);sidebar(3列,其中第一列是left,第三列是right,第二列则是top、center和bottom)。两种排列如下图所示:
二、搭建界面
1.这里我们采用headline的方式来搭建一个界面,看看布局的总体效果即可。html代码如下:
<div id="mainWindow" dojotype="dijit.layout.BorderContainer" design="headline"
gutters="false" style="width:100%; height:100%;">
<div id="header" dojotype="dijit.layout.ContentPane" region="top">
这是网站标题栏
</div>
<div id="rightPane" dojotype="dijit.layout.TabContainer" region="right">
<div dojotype="dijit.layout.ContentPane" title = "Tab 1" selected="true">
第一页
</div>
<div dojotype="dijit.layout.ContentPane" title="Tab 2" >
第二页
</div>
</div>
<div id="leftPane" dojotype="dijit.layout.AccordionContainer" region="left" >
左边栏
</div>
<div id="centerPane" dojotype="dijit.layout.SplitContainer" region="center">
中间内容
</div>
<div id="footer" dojotype="dijit.layout.StackContainer" region="bottom">
网站底部
</div>
</div>
</body>
2.为这些控件设置样式属性,css代码如下:
html, body {
height: 100%; width: 100%; margin: 0;
}
body{
background-color:white; overflow:hidden;
font-family: "Trebuchet MS";
}
.roundedCorners{
-moz-border-radius: 4px;
}
#header {
border: solid 2px #7EABCD;
background-color:white;
color:blue;
font-size:18pt;
text-align:center;
font-weight:bold;
height:60px;
}
#leftPane{
background-color:yellow;
color:red;
border: solid 2px cornflowerblue;
width:250px;
height:300px;
overflow:hidden;
}
#rightPane{
background-color:green;
color:yellow;
border: solid 2px cornflowerblue;
width:250px;
height:300px;
overflow:hidden;
}
#centerPane{
background-color:orange;
color:blue;
border: solid 2px cornflowerblue;
overflow:hidden;
}
#footer {
border: solid 2px #7EABCD;
background-color:white;
color:blue;
font-size:10pt;
text-align:center;
height:40px;
}
</style>
3.引用相应的dojo包,js代码如下:
dojo.require("dijit.layout.BorderContainer");
dojo.require("dijit.layout.ContentPane");
dojo.require("dijit.layout.AccordionContainer");
dojo.require("dijit.layout.TabContainer");
dojo.require("dijit.layout.SplitContainer");
dojo.require("dijit.layout.StackContainer");
</script>
4.别忘了要添加dojo的css和js引用哦,完整的代码如下:
<head>
<meta http-equiv="X-UA-Compatible" content="IE=7" />
<title></title>
<link href="dojo/dijit/themes/claro/claro.css" rel="stylesheet" type="text/css" />
<style type="text/css">
html, body {
height: 100%; width: 100%; margin: 0;
}
body{
background-color:white; overflow:hidden;
font-family: "Trebuchet MS";
}
.roundedCorners{
-moz-border-radius: 4px;
}
#header {
border: solid 2px #7EABCD;
background-color:white;
color:blue;
font-size:18pt;
text-align:center;
font-weight:bold;
height:60px;
}
#leftPane{
background-color:yellow;
color:red;
border: solid 2px cornflowerblue;
width:250px;
height:300px;
overflow:hidden;
}
#rightPane{
background-color:green;
color:yellow;
border: solid 2px cornflowerblue;
width:250px;
height:300px;
overflow:hidden;
}
#centerPane{
background-color:orange;
color:blue;
border: solid 2px cornflowerblue;
overflow:hidden;
}
#footer {
border: solid 2px #7EABCD;
background-color:white;
color:blue;
font-size:10pt;
text-align:center;
height:40px;
}
</style>
<script type="text/javascript">
var djConfig = {
parseOnLoad: true
};
</script>
<script type="text/javascript" src="dojo/dojo/dojo.js"></script>
<script type="text/javascript">
dojo.require("dijit.layout.BorderContainer");
dojo.require("dijit.layout.ContentPane");
dojo.require("dijit.layout.AccordionContainer");
dojo.require("dijit.layout.TabContainer");
dojo.require("dijit.layout.SplitContainer");
dojo.require("dijit.layout.StackContainer");
</script>
</head>
<body class="claro">
<div id="mainWindow" dojotype="dijit.layout.BorderContainer" design="headline"
gutters="false" style="width:100%; height:100%;">
<div id="header" dojotype="dijit.layout.ContentPane" region="top">
这是网站标题栏
</div>
<div id="rightPane" dojotype="dijit.layout.TabContainer" region="right">
<div dojotype="dijit.layout.ContentPane" title = "Tab 1" selected="true">
第一页
</div>
<div dojotype="dijit.layout.ContentPane" title="Tab 2" >
第二页
</div>
</div>
<div id="leftPane" dojotype="dijit.layout.AccordionContainer" region="left" >
左边栏
</div>
<div id="centerPane" dojotype="dijit.layout.SplitContainer" region="center">
中间内容
</div>
<div id="footer" dojotype="dijit.layout.StackContainer" region="bottom">
网站底部
</div>
</div>
</body>
</html>
三、特别说明
1.请特别注意包引用的顺序和js代码编写的顺序,尤其是在下面这段代码:
var djConfig = {
parseOnLoad: true
};
</script>
这段代码必须要在添加dojo.js之前执行,这样才能保证dojo的控件样式被应用,否则,将按照普通的html控件进行解析。我被这个破问题折腾了一上午,才发现是顺序的问题,笨啊!
2.dojo.require引用相应的控件也是必须,否则同样无法解析出dojo的控件样式。
3.这里只是简单看了下基本的布局,对于门外汉来说,竟然如此折腾,真是隔行如隔山呐。