在vs2005为winForm编程,有splitContainer控件可以用;可webForm可就没有这么个东西了。去问了赵老师,他说“试试dojo的splitContainer”,于是我查了N多资料捣鼓了1天终于搞定了,下面来总结一下这次收获的经验。效果图:
如何使用dojo中的某个控件
- 去官方网站下载最新版本的dojo,我用的是0.4.1的。
- 将其解压缩后放在项目所在目录下的js目录下
- 在网页的<head>标记内,做一次这样的引用,算是让js读取dojo相关的命名空间
<script type="text/javascript" src="js/dojo/dojo.js"></script>
- 紧跟其后,要这样来引用控件相关的类,例如本文中要使用的是splitContainer
dojo.require("dojo.widget.SplitContainer");
dojo.require("dojo.widget.ContentPane"); - 因为dojo是开源的,您可以在dojo\tests\widget目录下找到相应控件的使用方法,并且可以在这里查找每个方法的说明文档
- 根据sample得知,这样写就可以让splitContainer生效,其中SplitContainer的orientation决定了其水平方式分栏还是垂直方式分栏,style中的border属性决定了分隔条的风格。而两个ContentPane在其内即决定了分两栏,overflow设置为auto决定了在拖动分隔条时左右两侧的内容不会重叠。
<div id="SplitContainer1" dojoType="SplitContainer"
orientation="horizontal"
sizerWidth="5"
activeSizing="false"
style="border: 1px solid black; float: left; width: 100%; height: 100%;">
<div id="ContentPane1" dojoType="ContentPane" sizeMin="20" sizeShare="20" style="overflow:auto">
<!--左侧的内容-->
</div>
<div id="ContentPane2" dojoType="ContentPane" sizeMin="50" sizeShare="50" style="overflow:auto">
<!--右侧的内容-->
</div>
</div>
配合asp.net使用的注意事项
- 由于dojo使用的标记不符合xhtml1.0的规范,因此需要去掉webForm开头部分声明的这句话,否则无法使用
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- 考虑到大部分使用这种左右分栏结构的人同时需要收缩一侧的效果,写了如下的代码将其实现,注意调用的时候要这样写onclick="fac(event)"来兼容IE和FF
function fac(evt)
{
evt=evt?evt:window.event;
var oTarget=evt.srcElement||evt.target;
oTarget.disabled="disabled";
if (!dojo.widget.byId("SplitContainer1").isHide)
{
dojo.widget.byId("SplitContainer1").removeChild(dojo.widget.byId("ContentPane1"));
dojo.widget.byId("SplitContainer1").isHide=true;
oTarget.value=">>";
}
else
{
dojo.widget.byId("SplitContainer1").removeChild(dojo.widget.byId("ContentPane2"));
dojo.widget.byId("SplitContainer1").addChild(dojo.widget.byId("ContentPane1"));
dojo.widget.byId("SplitContainer1").addChild(dojo.widget.byId("ContentPane2"));
dojo.widget.byId("SplitContainer1").isHide=false;
oTarget.value="<<";
}
oTarget.disabled="";
} - 若配合msAjax控件一同使用,例如要用到updatePanel时,不要把整个splitContainer都放在一个updatePanel中,应尽量分几栏放几个,否则在回调之后,页面上的div标签的class属性都会消失得无影无踪,造成dojo控件失效。
- 去掉开头xhtml的声明之后会有产生一个并发症,某些ajax control toolkit的控件将不正常!