dojo学习第一天 Tab选项卡 实现


Posted in Javascript onAugust 28, 2011

其实不然,用《精通Dojo》里的话来说就是"Dojo不只是一个程序库,而是一个工具包",它比其他所有的JS库的插件更全面更广阔。它包含大约40个用户界面控件、1个图形框架、cometd支持、1个打包系统,还有其他的一些东西。

从dojo官方网站 上下载最新版1.6,解压下来,它有三个文件夹分别是:

dojo学习第一天 Tab选项卡 实现 

1. dojo: 是Dojo基础,你要做的其它事情都是在它的基础上,类似于jquery.js文件,但比它更丰富了一些其他功能;

2. dijit : Dojo的小部件框架及内建的小控件集.(大约有40个HTML用户小控件);

3 dojox: Dojo的扩展库,包含了从表格小部件到绘图库的所有功能。

 了解了这些就足够了,虽然才发布到1.6,没有像jquery那样到6.1,但dojo绝对是强大的,选择它,将是你一生不变的追求。(广告词)

 (注:dojo始于2004年,alex发起,然后经过众多DHTML专家开发,所以它现在已经很成熟了。)

 接下来,我们要来配置我们的第一个例子,准备好了吗?dojo旅程正式开始,我们要做一个表单注册的例子.

首先我们要引用它的主题样式:

<style> 
@import url(../dijit/themes/tundra/tundra.css); 
@import url(../dojo/resources/dojo.css); 
</style>

themes就是主题样式了,里面已经存在了几个,我任选了其中的"tundra",然后还要引用下dojo.css。再就是引用dojo基础文件dojo.js:

<script src='../dojo/dojo.js' djConfig='parseOnLoad:true'></script>
这里要注意的是djConfig,由于我们要用到声明式小部件,所以需要parse,这个使用起来会简单点,如果用编程式写法就不需要了,只需注意下就行了。然后是引用parser.js和ContentPane.js,parser是使用声明式所必需的,ContentPane是内容面板所必需的。在dojo里引用的方式是调用require方法,这个和PHP里的 require_once很相似,就是只引用一次该文件.

<script> 
dojo.require("dojo.parser"); 
dojo.require('dijit.layout.ContentPane'); 
dojo.require('dijit.layout.TabContainer'); 
</script>

这里的"."写法,可以理解为文件夹下的类,或者命名空间,和AS3里很相似。大家是不是发现多了一个TabContainer,这个是我们要用到的选项卡切换小插件了。如果调用这个插件呢,很简单,只需要在我们要使用的地方用dojoType属性指明就行了。
<div dojoType='dijit.layout.TabContainer' class="myForm"> 
<div dojoType='dijit.layout.ContentPane' title='个人信息'> 
<label for="firstName">First Name:</label><input type='text' id='firstName' /></br> 
<label for="lastName">Last Name:</label><input type='text' id='lastName' /></br> 
<label for="middleInitial">Middle Initial:</label><input type='text' id='middleInitial' /></br> 
</div> 
<div dojoType='dijit.layout.ContentPane' title='联系地址'> 
<label>Email:</label><input type='text' id='email' /></br> 
<label>Address:</label><input type='text' id='address' /></br> 
<label>State:</label><input type='text' id='state' /></br> 
<label>City:</label><input type='text' id='city' /></br> 
<label>Country:</label><input type='text' id='country' /></br> 
</div> 
<div dojoType='dijit.layout.ContentPane' title='联系电话'> 
<label>Work Phone:</label><input type='text' id='workPhone' /></br> 
<label>Home Phone:</label><input type='text' id='homePhone' /></br> 
<label>Cell Phone:</label><input type='text' id='CellPhone' /></br> 
</div> 
</div>

然后我们来一句句理解, dojoType='dijit.layout.TabContainer'是指让容器拥有tab选项卡功能,dojoType='dijit.layout.ContentPane'这个是指该容器是一个内容块,也就是单个的选项卡.

最后就没了,这个简单的选项卡就完成了。大家是不是觉得很奇怪,我们竟然没写其它的一行代码就完成了这个功能?这就是声明式小插件的好处了,因为你给dojoType声明了,它就会自动去绑定这个功能。

好了,这是我第一天的正式接触dojo,可能有理解错误的地方,大家可以指出来,我们一起学习进步。 如果你喜欢,我会写第二篇甚至更多.

本文的最终示例图:demo演示请查阅:http://www.lovewebgames.com/dojoroot/myStudy/study_001.html

dojo学习第一天 Tab选项卡 实现

完整代码:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<title>第一天 </title> 
<meta name="Generator" content="EditPlus"> 
<meta name="Author" content=""> 
<meta name="Keywords" content=""> 
<meta name="Description" content=""> 
<style> 
@import url(../dijit/themes/tundra/tundra.css); 
@import url(../dojo/resources/dojo.css); 
</style> 
<script src='../dojo/dojo.js' djConfig='parseOnLoad:true'></script> 
<script> 
dojo.require("dojo.parser"); 
dojo.require('dijit.layout.ContentPane'); 
dojo.require('dijit.layout.TabContainer'); 
</script> 
<style> 
.myForm{width:600px;height:300px;line-height:1.6;} 
.myForm label{width:150px;float:left;} 
</style> 
</head> <body class="tundra"> 
<div dojoType='dijit.layout.TabContainer' class="myForm"> 
<div dojoType='dijit.layout.ContentPane' title='个人信息'> 
<label for="firstName">First Name:</label><input type='text' id='firstName' /></br> 
<label for="lastName">Last Name:</label><input type='text' id='lastName' /></br> 
<label for="middleInitial">Middle Initial:</label><input type='text' id='middleInitial' /></br> 
</div> 
<div dojoType='dijit.layout.ContentPane' title='联系地址'> 
<label>Email:</label><input type='text' id='email' /></br> 
<label>Address:</label><input type='text' id='address' /></br> 
<label>State:</label><input type='text' id='state' /></br> 
<label>City:</label><input type='text' id='city' /></br> 
<label>Country:</label><input type='text' id='country' /></br> 
</div> 
<div dojoType='dijit.layout.ContentPane' title='联系电话'> 
<label>Work Phone:</label><input type='text' id='workPhone' /></br> 
<label>Home Phone:</label><input type='text' id='homePhone' /></br> 
<label>Cell Phone:</label><input type='text' id='CellPhone' /></br> 
</div> 
</div> 
</body> 
</html>
Javascript 相关文章推荐
javascript实现数字+字母验证码的简单实例
Feb 10 Javascript
关于Javascript加载执行优化的研究报告
Dec 16 Javascript
黑帽seo劫持程序,js劫持搜索引擎代码
Sep 15 Javascript
jquery实现仿Flash的横向滑动菜单效果代码
Sep 17 Javascript
五种js判断是否为整数类型方式
Dec 03 Javascript
AngularJS 中的指令实践开发指南(一)
Mar 20 Javascript
js编写三级联动简单案例
Dec 21 Javascript
轻松学习Javascript闭包
Mar 01 Javascript
Angularjs中数据绑定的实例详解
Aug 25 Javascript
vue单页应用加百度统计代码(亲测有效)
Jan 31 Javascript
基于vue-cli npm run build之后vendor.js文件过大的解决方法
Sep 27 Javascript
Vue.js获取手机系统型号、版本、浏览器类型的示例代码
May 10 Javascript
js中设置元素class的三种方法小结
Aug 28 #Javascript
IE6、IE7中setAttribute不支持class/for/rowspan/colspan等属性
Aug 28 #Javascript
IE6、IE7中获取Button元素的值的bug说明
Aug 28 #Javascript
JavaScript 选中文字并响应获取的实现代码
Aug 28 #Javascript
js预载入和JavaScript Image()对象使用介绍
Aug 28 #Javascript
jquery 查找iframe父级页面元素的实现代码
Aug 28 #Javascript
基于jquery的多彩百分比 动态进度条 投票效果显示效果实现代码
Aug 28 #Javascript
You might like
PHP的array_diff()函数在处理大数组时的效率问题
2011/11/27 PHP
php适配器模式介绍
2012/08/14 PHP
基于PHP5魔术常量与魔术方法的详解
2013/06/13 PHP
PHP常用工具类大全附全部代码下载
2015/12/07 PHP
Symfony的安装和配置方法
2016/03/17 PHP
TNC vs RR BO3 第一场 2.14
2021/03/10 DOTA
Javascript注入技巧
2007/06/22 Javascript
JQuery AJAX提交中文乱码的解决方案
2010/07/02 Javascript
JS 操作Array数组的方法及属性实例解析
2014/01/08 Javascript
JavaScript中实现PHP的打乱数组函数shuffle实例
2014/10/11 Javascript
JavaScript中的值类型转换介绍
2014/12/31 Javascript
JavaScript判断数组是否包含指定元素的方法
2015/07/01 Javascript
前端实现文件的断点续传(前端文件提交+后端PHP文件接收)
2016/11/04 Javascript
Vue.js 递归组件实现树形菜单(实例分享)
2016/12/21 Javascript
JS中mouseup事件丢失的原因与解决办法
2017/06/14 Javascript
bootstrap fileinput实现文件上传功能
2017/08/23 Javascript
微信小程序错误this.setData报错及解决过程
2019/09/18 Javascript
vue 解决文本框被键盘遮住的问题
2019/11/06 Javascript
JS实现的定时器展示简单秒表、页面弹框及跳转操作完整示例
2020/01/26 Javascript
解决Mint-ui 框架Popup和Datetime Picker组件滚动穿透的问题
2020/11/04 Javascript
[36:09]Secret vs VG 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.24
2019/09/10 DOTA
python实现中文输出的两种方法
2015/05/09 Python
基于python神经卷积网络的人脸识别
2018/05/24 Python
Python函数返回不定数量的值方法
2019/01/22 Python
对python 判断数字是否小于0的方法详解
2019/01/26 Python
详解程序意外中断自动重启shell脚本(以Python为例)
2019/07/26 Python
用python解压分析jar包实例
2020/01/16 Python
详解CSS中iconfont的使用
2015/08/04 HTML / CSS
阻止移动设备(手机、pad)浏览器双击放大网页的方法
2014/06/03 HTML / CSS
数以千计的折扣工业产品:ESE Direct
2018/05/20 全球购物
自荐信的五个重要部分
2013/10/29 职场文书
工作室成员个人发展规划范文
2014/01/24 职场文书
教师政风行风评议心得体会
2014/10/21 职场文书
2015年收银工作总结范文
2015/04/01 职场文书
2015年酒店销售部工作总结
2015/07/24 职场文书
详解Mysq MVCC多版本的并发控制
2022/04/29 MySQL