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 相关文章推荐
又一个小巧的图片预加载类
May 05 Javascript
javascript 日期时间函数(经典+完善+实用)
May 27 Javascript
JavaScript高级程序设计(第3版)学习笔记3 js简单数据类型
Oct 11 Javascript
JS刷新当前页面的几种方法总结
Dec 24 Javascript
用Jquery.load载入页面后样式没了页面混乱的解决方法
Oct 20 Javascript
浅谈JSON和JSONP区别及jQuery的ajax jsonp的使用
Nov 23 Javascript
AngularJS基础知识
Dec 21 Javascript
jquery popupDialog 使用 加载jsp页面的方法
Oct 25 Javascript
Javascript同时声明一连串(多个)变量的方法
Jan 23 Javascript
纯js模仿windows系统日历
Feb 04 Javascript
jQuery实现html table行Tr的复制、删除、计算功能
Jul 10 jQuery
jquery实现Ajax请求的几种常见方式总结
May 28 jQuery
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
腾讯QQ php程序员面试题目整理
2010/06/08 PHP
PHP读取txt文件的内容并赋值给数组的代码
2011/11/03 PHP
PHP遍历目录并返回统计目录大小
2014/06/09 PHP
用js实现的仿sohu博客更换页面风格(简单版)
2007/03/22 Javascript
学习ExtJS 访问容器对象
2009/10/07 Javascript
某页码显示的helper 少量调整,另附js版
2010/09/12 Javascript
jQuery 开发者应该注意的9个错误
2012/05/03 Javascript
jQuery学习笔记 操作jQuery对象 文档处理
2012/09/19 Javascript
js验证输入是否为手机号码或电话号码示例
2013/12/30 Javascript
JS判断文本框内容改变事件的简单实例
2014/03/07 Javascript
jquery+css3打造一款ajax分页插件(自写)
2014/06/18 Javascript
JQuery实现表格动态增加行并对新行添加事件
2014/07/30 Javascript
原生JS实现平滑回到顶部组件
2016/03/16 Javascript
自学实现angularjs依赖注入
2016/12/20 Javascript
微信小程序动态显示项目倒计时效果
2017/06/13 Javascript
Node.js服务器开启Gzip压缩教程
2017/08/11 Javascript
mescroll.js上拉加载下拉刷新组件使用详解
2017/11/13 Javascript
解决vue处理axios post请求传参的问题
2018/03/05 Javascript
vue的toast弹窗组件实例详解
2018/05/14 Javascript
详解Angular模板引用变量及其作用域
2018/11/23 Javascript
微信小程序开发常见问题及解决方案
2019/07/11 Javascript
详解vue-router的导航钩子(导航守卫)
2020/11/02 Javascript
三剑客:offset、client和scroll还傻傻分不清?
2020/12/04 Javascript
从零学Python之入门(四)运算
2014/05/27 Python
Python实现字典的key和values的交换
2015/08/04 Python
python 搭建简单的http server,可直接post文件的实例
2019/01/03 Python
python 如何将office文件转换为PDF
2020/09/22 Python
马来西亚网上购物平台:ezbuy
2018/02/13 全球购物
新西兰购物网站:TheMarket NZ
2020/09/19 全球购物
优秀应届生推荐信
2013/11/09 职场文书
营销总经理岗位职责
2014/02/02 职场文书
《美丽的彩虹》教学反思
2014/02/25 职场文书
夫妻婚内购房协议书
2014/10/05 职场文书
优秀党员主要事迹材料
2015/11/04 职场文书
2016中学教师读书心得体会
2016/01/13 职场文书
Python  序列化反序列化和异常处理的问题小结
2022/12/24 Python