<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Power by Result Search &#187; dojo</title>
	<atom:link href="http://www.result-search.com/sty/category/technology/dojo/feed" rel="self" type="application/rss+xml" />
	<link>http://www.result-search.com/sty</link>
	<description>Just another weblog</description>
	<lastBuildDate>Wed, 23 Jun 2010 03:12:17 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Dojotoolkit介绍</title>
		<link>http://www.result-search.com/sty/2009/04/23/dojotoolkit-introduce.html</link>
		<comments>http://www.result-search.com/sty/2009/04/23/dojotoolkit-introduce.html#comments</comments>
		<pubDate>Thu, 23 Apr 2009 06:06:18 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[dojo]]></category>

		<guid isPermaLink="false">http://www.yaaahaaa.com/2009/04/23/dojotoolkit%e4%bb%8b%e7%bb%8d/</guid>
		<description><![CDATA[Dojotoolkit介绍
Dojotoolkit是当前比较流行的JavaScript框架，dojo主要提供了以下功能：Java Script Web组件（例如Tree，Grid，Button，Menu等），事件处理框架，Ajax异步调用等功能，非常好用。
Dojo现在主要有两个版本：
0.4.3 现在流行的版本，优点是，功能非常强大，非常稳定，缺点是类库本身比较低，执行效率较低
0.9 beta是新的版本，是为了保留0.4.3的有点同时提升性能而重写的一个版本，但是现在还处在beta阶段，bug相会还比较多。但是0.9系列绝对是将来的发展方向。
我们主要以0.9 beta版本为讲解对象，主要讲解以下内容：Widget组件，事件处理，Ajax等功能。但是情大家注意，dojo的功能远不止这么多。
Dojo安装
1 从下述网站下载dojo0.9 beta压缩文件
http://dojotoolkit.org/downloads
2 在你的Web项目目录中建立一个名字叫做js的目录（名字任意，这里叫js）
3 将压缩文件在上面建立的目录中解压缩，得到如下文件结构：

4 打开浏览器，在地址栏中输入如下内容：
http://hostname:port/js/dojo-0.9.0beta/dijit/themes/themeTester.html
如果看到如下页面说明安装成功：
themeTester.png

Dojo Widget 组件
我们回头看/themeTester.html 画面，上面的组件要比HTML默认的组件漂亮很多。他们都是使用dojo的widget（又叫dijit）来完成的。
Dojo widget在目录dijit中。
下面我们使用一个小例子还逐步的说明dijit的使用方法，通过如下步骤，我们将todo的insert画面改编为dijit组件。
我们有一个小小的Todo输入的页面，静态的效果如下：

这里有很多地方不是很方便，例如：
1 日期能不能出现一个日历选择对话框，只要选择就好？
2 日期能不能自动校验，例如如果输入，2007/02/29可以判断为错误日期？
3 时间需要校验，需要校验格式（HH:mm:ss）和数字内容例如不会有25:89:60。
4 下拉列表能不能支持手工编写？能不能支持根据已经输入的值自动过滤选择项？
5 能否让系统提示必须填入项目？
通过使用dojo的dijit组件这些都可以做到，并且dijit组件有两种使用方式：标签和JS编程动态实现。
无论那种方式实现都需要了解一些基本的步骤：
第一步，由于dojo是JavaScript编写的，所以第一步必须首先引用dojo框架的JavaScript，同时dojo提供了一些初始化配置，可以在引用dojo的时候同时配置，代码如下：
&#60;script type=&#8221;text/javascript&#8221;
src=&#8221;&#60;%= request.getContextPath()%&#62;/dojo-0.9.0beta/dojo/dojo.js&#8221;
djConfig=&#8221;isDebug: true, parseOnLoad: true&#8221;&#62;
&#60;/script&#62;
其中src指向的是dojo在web项目中的存放路径。
djConfig是dojo追加的自定义属性，在HTML标准里并没有。使用djConfig可以做一些基本的配置，isDebug表示了当前页面中使用 的dojo内容是否处在调试状态，在调试状态可以输出更多的内容，一般开发的时候我么选择true。parseOnLoad表示所有的dijit组件是否 在html页面装载的时候自动的做展现（Render）处理，使用dijit组件的时候我们选择true，没有使用的时候使用false可以获得更好的性 能。
第二步，引用需要使用的dojo类，这一步有些像Java中的import，注意添加引用的类会增加页面加载是JavaScript的下载量，所以应该尽量的精简引用的dojo对象。代码为：
&#60;script type=&#8221;text/javascript&#8221;&#62;
dojo.require(&#8220;dijit.form.ValidationTextbox&#8221;);
dojo.require(&#8220;dijit.form.DateTextbox&#8221;);
dojo.require(&#8220;dijit.form.ComboBox&#8221;);
dojo.require(&#8220;dijit.form.Button&#8221;);
dojo.require(&#8220;dijit.form.Textbox&#8221;);
dojo.require(&#8220;dijit.form.NumberTextbox&#8221;);
dojo.require(&#8220;dijit.form.CurrencyTextbox&#8221;);
dojo.require(&#8220;dojo.currency&#8221;);
dojo.require(&#8220;dojo.date.locale&#8221;);
dojo.require(&#8220;dojo.parser&#8221;);
&#60;/script&#62;
上述的代码说明了我们需要在后续的代码中使用的dojo组件。
第三步，引用需要使用的CSS文件，由于dojo使用CSS实现了主题的概念，所以我们在使用dojo的时候一定要选择合适的主题。代码为：
&#60;style type=&#8221;text/css&#8221;&#62;
@import &#8220;/teamware/dojo-0.9.0beta/dojo/resources/dojo.css&#8221;;
@import &#8220;/teamware/dojo-0.9.0beta/dijit/themes/dijit.css&#8221;;
@import &#8220;/teamware/dojo-0.9.0beta/dijit/themes/tundra/tundra.css&#8221;;
&#60;/style&#62;
当然，也可以加入自己的内容，自定以主题。默认的主题时tundra主题。
另外需要注意，使用主题的时候需要在html的body元素上使用class属性，代码为：
&#60;body class=&#8221;tundra&#8221;&#62;
第四步（标签），使用dojo的dijit组件。
所有的组件都有一个dojo自定义的属性dojoType，dojoType决定了这个组件的dijit类型。例如：
日期组件
&#60;input id=&#8221;startDate&#8221; type=&#8221;text&#8221; name=&#8221;todo.startDate&#8221;
class=&#8221;medium&#8221; value=&#8221;2005-12-30&#8243;
dojoType=&#8221;dijit.form.DateTextbox&#8221;
constraints={min:&#8217;2004-01-01&#8242;,max:&#8217;2006-12-31&#8242;}
required=&#8221;true&#8221;
promptMessage=&#8221;mm/dd/yyyy&#8221;
invalidMessage=&#8221;Invalid date. Use mm/dd/yyyy format.&#8221; /&#62;
这里dojoType=”dijit.form.DateTextbox”，表示这个组件的类型为DateTextbox类型，具体表现形式为：

时间组件：
&#60;input id=&#8221;startTime&#8221; type=&#8221;text&#8221; name=&#8221;todo.startTime&#8221;
class=&#8221;medium&#8221; value=&#8221;5:45:00 pm&#8221;        [...]]]></description>
			<content:encoded><![CDATA[<p>Dojotoolkit介绍</p>
<p>Dojotoolkit是当前比较流行的JavaScript框架，dojo主要提供了以下功能：Java Script Web组件（例如Tree，Grid，Button，Menu等），事件处理框架，Ajax异步调用等功能，非常好用。</p>
<p>Dojo现在主要有两个版本：</p>
<p>0.4.3 现在流行的版本，优点是，功能非常强大，非常稳定，缺点是类库本身比较低，执行效率较低</p>
<p>0.9 beta是新的版本，是为了保留0.4.3的有点同时提升性能而重写的一个版本，但是现在还处在beta阶段，bug相会还比较多。但是0.9系列绝对是将来的发展方向。</p>
<p>我们主要以0.9 beta版本为讲解对象，主要讲解以下内容：Widget组件，事件处理，Ajax等功能。但是情大家注意，dojo的功能远不止这么多。</p>
<p>Dojo安装</p>
<p>1 从下述网站下载dojo0.9 beta压缩文件</p>
<p>http://dojotoolkit.org/downloads</p>
<p>2 在你的Web项目目录中建立一个名字叫做js的目录（名字任意，这里叫js）</p>
<p>3 将压缩文件在上面建立的目录中解压缩，得到如下文件结构：</p>
<div><img class="blogimg" src="http://hiphotos.baidu.com/ayiaman/pic/item/90c392397e098af93a87ce41.jpg" border="0" alt="" /></div>
<p>4 打开浏览器，在地址栏中输入如下内容：</p>
<p>http://hostname:port/js/dojo-0.9.0beta/dijit/themes/themeTester.html</p>
<p>如果看到如下页面说明安装成功：</p>
<p>themeTester.png</p>
<div><img class="blogimg" src="http://hiphotos.baidu.com/ayiaman/pic/item/740b49f459db1d64ddc4744d.jpg" border="0" alt="" /></div>
<p>Dojo Widget 组件</p>
<p>我们回头看/themeTester.html 画面，上面的组件要比HTML默认的组件漂亮很多。他们都是使用dojo的widget（又叫dijit）来完成的。</p>
<p>Dojo widget在目录dijit中。</p>
<p>下面我们使用一个小例子还逐步的说明dijit的使用方法，通过如下步骤，我们将todo的insert画面改编为dijit组件。</p>
<p>我们有一个小小的Todo输入的页面，静态的效果如下：</p>
<div><img class="blogimg" src="http://hiphotos.baidu.com/ayiaman/pic/item/d92e2009e225c0c53bc76357.jpg" border="0" alt="" /></div>
<p>这里有很多地方不是很方便，例如：</p>
<p>1 日期能不能出现一个日历选择对话框，只要选择就好？</p>
<p>2 日期能不能自动校验，例如如果输入，2007/02/29可以判断为错误日期？</p>
<p>3 时间需要校验，需要校验格式（HH:mm:ss）和数字内容例如不会有25:89:60。</p>
<p>4 下拉列表能不能支持手工编写？能不能支持根据已经输入的值自动过滤选择项？</p>
<p>5 能否让系统提示必须填入项目？</p>
<p>通过使用dojo的dijit组件这些都可以做到，并且dijit组件有两种使用方式：标签和JS编程动态实现。</p>
<p>无论那种方式实现都需要了解一些基本的步骤：</p>
<p>第一步，由于dojo是JavaScript编写的，所以第一步必须首先引用dojo框架的JavaScript，同时dojo提供了一些初始化配置，可以在引用dojo的时候同时配置，代码如下：</p>
<p>&lt;script type=&#8221;text/javascript&#8221;</p>
<p>src=&#8221;&lt;%= request.getContextPath()%&gt;/dojo-0.9.0beta/dojo/dojo.js&#8221;</p>
<p>djConfig=&#8221;isDebug: true, parseOnLoad: true&#8221;&gt;</p>
<p>&lt;/script&gt;</p>
<p>其中src指向的是dojo在web项目中的存放路径。</p>
<p>djConfig是dojo追加的自定义属性，在HTML标准里并没有。使用djConfig可以做一些基本的配置，isDebug表示了当前页面中使用 的dojo内容是否处在调试状态，在调试状态可以输出更多的内容，一般开发的时候我么选择true。parseOnLoad表示所有的dijit组件是否 在html页面装载的时候自动的做展现（Render）处理，使用dijit组件的时候我们选择true，没有使用的时候使用false可以获得更好的性 能。</p>
<p>第二步，引用需要使用的dojo类，这一步有些像Java中的import，注意添加引用的类会增加页面加载是JavaScript的下载量，所以应该尽量的精简引用的dojo对象。代码为：</p>
<p>&lt;script type=&#8221;text/javascript&#8221;&gt;</p>
<p>dojo.require(&#8220;dijit.form.ValidationTextbox&#8221;);</p>
<p>dojo.require(&#8220;dijit.form.DateTextbox&#8221;);</p>
<p>dojo.require(&#8220;dijit.form.ComboBox&#8221;);</p>
<p>dojo.require(&#8220;dijit.form.Button&#8221;);</p>
<p>dojo.require(&#8220;dijit.form.Textbox&#8221;);</p>
<p>dojo.require(&#8220;dijit.form.NumberTextbox&#8221;);</p>
<p>dojo.require(&#8220;dijit.form.CurrencyTextbox&#8221;);</p>
<p>dojo.require(&#8220;dojo.currency&#8221;);</p>
<p>dojo.require(&#8220;dojo.date.locale&#8221;);</p>
<p>dojo.require(&#8220;dojo.parser&#8221;);</p>
<p>&lt;/script&gt;</p>
<p>上述的代码说明了我们需要在后续的代码中使用的dojo组件。</p>
<p>第三步，引用需要使用的CSS文件，由于dojo使用CSS实现了主题的概念，所以我们在使用dojo的时候一定要选择合适的主题。代码为：</p>
<p>&lt;style type=&#8221;text/css&#8221;&gt;</p>
<p>@import &#8220;/teamware/dojo-0.9.0beta/dojo/resources/dojo.css&#8221;;</p>
<p>@import &#8220;/teamware/dojo-0.9.0beta/dijit/themes/dijit.css&#8221;;</p>
<p>@import &#8220;/teamware/dojo-0.9.0beta/dijit/themes/tundra/tundra.css&#8221;;</p>
<p>&lt;/style&gt;</p>
<p>当然，也可以加入自己的内容，自定以主题。默认的主题时tundra主题。</p>
<p>另外需要注意，使用主题的时候需要在html的body元素上使用class属性，代码为：</p>
<p>&lt;body class=&#8221;tundra&#8221;&gt;</p>
<p>第四步（标签），使用dojo的dijit组件。</p>
<p>所有的组件都有一个dojo自定义的属性dojoType，dojoType决定了这个组件的dijit类型。例如：</p>
<p>日期组件</p>
<p>&lt;input id=&#8221;startDate&#8221; type=&#8221;text&#8221; name=&#8221;todo.startDate&#8221;</p>
<p>class=&#8221;medium&#8221; value=&#8221;2005-12-30&#8243;</p>
<p>dojoType=&#8221;dijit.form.DateTextbox&#8221;</p>
<p>constraints={min:&#8217;2004-01-01&#8242;,max:&#8217;2006-12-31&#8242;}</p>
<p>required=&#8221;true&#8221;</p>
<p>promptMessage=&#8221;mm/dd/yyyy&#8221;</p>
<p>invalidMessage=&#8221;Invalid date. Use mm/dd/yyyy format.&#8221; /&gt;</p>
<p>这里dojoType=”dijit.form.DateTextbox”，表示这个组件的类型为DateTextbox类型，具体表现形式为：</p>
<div><img class="blogimg" src="http://hiphotos.baidu.com/ayiaman/pic/item/b807cd82c91afa9af603a653.jpg" border="0" alt="" /></div>
<p>时间组件：</p>
<p>&lt;input id=&#8221;startTime&#8221; type=&#8221;text&#8221; name=&#8221;todo.startTime&#8221;</p>
<p>class=&#8221;medium&#8221; value=&#8221;5:45:00 pm&#8221;                               dojoType=&#8221;dijit.form.ValidationTextbox&#8221;</p>
<p>validator=&#8221;dojo.date.locale.parse&#8221;</p>
<p>constraints={formatLength:&#8217;medium&#8217;,selector:&#8217;time&#8217;}</p>
<p>trim=&#8221;true&#8221;</p>
<p>required=&#8221;true&#8221;</p>
<p>invalidMessage=&#8221;Invalid time.&#8221; /&gt;</p>
<p>具体表现形式为：</p>
<div><img class="blogimg" src="http://hiphotos.baidu.com/ayiaman/pic/item/384148b35b38f2add9335a53.jpg" border="0" alt="" /></div>
<p>第四步（JS编程动态实现），使用dojo的dijit组件。</p>
<p>在使用Struts2的过程中，为了方便操作，我们一般使用Struts2的内置标签，例如：&lt;s:text/&gt;等。但是使用这些标签有一个 问题，这些标签都是Struts2的标签，在定制这些标签的时候没有考虑到dojo，所以这些标签中不能使用dojoType属性，所以要想在 Struts2中要想使用dojo，就得：要么放弃这些好用的Struts2标签，要么，就是我们要讲的使用JS动态的使用dojo。</p>
<p>例如，我们有了如下的JSP页面（只讲述form部分），其中使用了struts2标签：</p>
<p>&lt;s:form action=&#8221;insert&#8221; namespace=&#8221;/todo&#8221;&gt;</p>
<p>&lt;s:textfield id=&#8221;startDate&#8221;</p>
<p>name=&#8221;todo.startDate&#8221; label=&#8221;Start Date&#8221; /&gt;</p>
<p>&lt;s:textfield id=&#8221;startTime&#8221;</p>
<p>name=&#8221;todo.startTime&#8221; label=&#8221;Start Time&#8221; /&gt;</p>
<p>&lt;s:textfield id=&#8221;endDate&#8221;</p>
<p>name=&#8221;todo.endDate&#8221; label=&#8221;End Date&#8221; /&gt;</p>
<p>&lt;s:textfield id=&#8221;endTime&#8221;</p>
<p>name=&#8221;todo.endTime&#8221; label=&#8221;Emd Time&#8221; /&gt;</p>
<p>&lt;s:select list=&#8221;%{#{&#8216;完成&#8217;:'完成&#8217;,'未完成&#8217;:'未完成&#8217;}}&#8221;</p>
<p>name=&#8221;status&#8221; id=&#8221;status&#8221; label=&#8221;Status&#8221;&gt;</p>
<p>&lt;/s:select&gt;</p>
<p>&lt;s:select list=&#8221;%{#{&#8216;高&#8217;:'高&#8217;,'中&#8217;:'中&#8217;,'低&#8217;:'低&#8217;}}&#8221;</p>
<p>name=&#8221;priority&#8221;</p>
<p>id=&#8221;priority&#8221; label=&#8221;Priority&#8221;&gt;</p>
<p>&lt;/s:select&gt;</p>
<p>&lt;s:select list=&#8221;%{#{&#8216;个人&#8217;:'个人&#8217;,'商务&#8217;:'商务&#8217;}}&#8221;</p>
<p>name=&#8221;category&#8221;</p>
<p>id=&#8221;category&#8221; label=&#8221;Category&#8221;&gt;&lt;/s:select&gt;</p>
<p>&lt;s:textfield id=&#8221;title&#8221;</p>
<p>name=&#8221;todo.title&#8221; label=&#8221;Title&#8221;&gt;&lt;/s:textfield&gt;</p>
<p>&lt;s:textarea id=&#8221;content&#8221;</p>
<p>name=&#8221;todo.content&#8221; label=&#8221;Content&#8221; cols=&#8221;20&#8243;</p>
<p>rows=&#8221;10&#8243;&gt;&lt;/s:textarea&gt;</p>
<p>&lt;s:submit id=&#8221;insertButton&#8221; label=&#8221;insert&#8221; /&gt;</p>
<p>&lt;/s:form&gt;</p>
<p>那么我们如何使用JavaScript来动态的使用Dojo呢？</p>
<p>基本原理如下：</p>
<p>（1）        构造组件需要使用的dojo属性</p>
<p>（2）        找到需要套用dojo组件的HTML 元素，使用前面定义的属性建立新的替代组件，</p>
<p>例如，现在要将</p>
<p>&lt;s:textfield id=&#8221;startDate&#8221;</p>
<p>name=&#8221;todo.startDate&#8221; label=&#8221;Start Date&#8221; /&gt;</p>
<p>替换为dijit.form.DateTextbox类型，代码为：</p>
<p>var paramsStartDate = {</p>
<p>required: &#8220;true&#8221;,</p>
<p>constraints: {selector: &#8220;date&#8221;, formatLength: &#8220;short&#8221;,</p>
<p>datePattern: &#8220;yyyy-MM-dd&#8221;, timePattern: &#8220;HH:mm:ss&#8221;, locale: &#8220;zh-cn&#8221;}</p>
<p>}</p>
<p>var startDateText = new dijit.form.DateTextbox(paramsStartDate,</p>
<p>document.getElementById(&#8220;startDate&#8221;));</p>
<p>首先我们定义了一个Map型的对象paramsStartDate用来存储我们在构建dijit组件时使用的属性和值。之后我们使用dijit.form.DateTextbox的构造方法来创建dojo类型的组件。</p>
<p>但是需要注意一点，上述代码必须在HTML页面load的时候执行，否则无法正常创建dojo组件，这里我们使用了dojo对象的addOnLoad方法吧这段代码加入到HTML页面load时运行的代码中。全部的JavaScript代码如下：</p>
<p>&lt;script type=&#8221;text/javascript&#8221;&gt;</p>
<p>dojo.addOnLoad(</p>
<p>function () {</p>
<p>var paramsStartDate = {</p>
<p>required: &#8220;true&#8221;,</p>
<p>constraints: {selector: &#8220;date&#8221;, formatLength: &#8220;short&#8221;,</p>
<p>datePattern: &#8220;yyyy-MM-dd&#8221;, timePattern: &#8220;HH:mm:ss&#8221;,</p>
<p>locale: &#8220;zh-cn&#8221;}</p>
<p>}</p>
<p>var startDateText = new dijit.form.DateTextbox(paramsStartDate,</p>
<p>document.getElementById(&#8220;startDate&#8221;));</p>
<p>/* init start time */</p>
<p>var paramsStartTime = {</p>
<p>value: &#8220;08:30:00&#8243;,</p>
<p>validator: dojo.date.locale.parse,</p>
<p>constraints: {formatLength: &#8220;short&#8221;, selector: &#8220;time&#8221;,</p>
<p>timePattern: &#8220;HH:mm:ss&#8221;},</p>
<p>trim: &#8220;true&#8221;,</p>
<p>required: &#8220;true&#8221;,</p>
<p>invalidMessage: &#8220;Invalid time. Use HH:mm:ss where HH is 00 &#8211; 23 hours.&#8221;</p>
<p>}</p>
<p>var startTimeText =</p>
<p>new dijit.form.ValidationTextbox(paramsStartTime,</p>
<p>document.getElementById(&#8220;startTime&#8221;));</p>
<p>/* init title */</p>
<p>var paramsTitleText = {</p>
<p>required: &#8220;true&#8221;,</p>
<p>promptMessage: &#8220;Enter a Title&#8221;</p>
<p>}</p>
<p>var titleText =</p>
<p>new dijit.form.ValidationTextbox(paramsTitleText,</p>
<p>document.getElementById(&#8220;title&#8221;));</p>
<p>}</p>
<p>);</p>
<p>&lt;/script&gt;</p>
<p>Dojo事件处理<br />
传统的使用JavaScript Event的方式和dojo.connect的方式<br />
JavaScript中使用事件的方式为：<br />
&lt;script type=&#8221;text/javascript&#8221;&gt;<br />
function foo() {<br />
alert(&#8220;Hello!&#8221;);<br />
}<br />
&lt;/script&gt;</p>
<p>&lt;button id=&#8221;firstButton&#8221; onclick=&#8221;foo();&#8221; &gt;Hello!&lt;/button&gt;</p>
<p>上述代码表示firstButton被点击（onclick）的时候，触发foo()方法。</p>
<p>使用上述方式很简单，但是存在不好的地方，所有的画面表示内容（例如&lt;button&gt;标签）会和事件处理（onclick=”foo(); ”）关联起来。当画面事件处理比较简单的时候，这个缺点体现不出来，但是当画面时间比较多，并且经常需要调整JavaScript方法和表示内容的时候就 会暴露出来修改比较困难的问题。</p>
<p>Dojo.connect方法<br />
可以使用connect将JavaScript方法和表示组件联合起来，例如：<br />
dojo.addOnLoad(<br />
function() {<br />
dojo.connect(dojo.byId(&#8220;firstButton&#8221;), &#8220;onclick&#8221;, foo);<br />
}<br />
);<br />
上述的代码表示将firstButton的onclick事件和foo方法联系起来，当firstButton被点击的时候会触发foo方法。<br />
这里就解决了画面表示内容（例如&lt;button&gt;标签）和事件处理之间关联的问题。我们可以在onLoad方法内部将所有的关联链接起来。</p>
<p>Event Object 说明<br />
我们接着dojo.connect方法说，能不能在JavaScript方法内部看到事件的详细信息？<br />
我们把事件的相关信息认为Event Object对象，例如，在做方法的时候，我们可以使用一个dojo的内置对象叫做EventObject</p>
<p>EventObject属性：<br />
event.target —  触发事件的HTML元素（the element that generated the event）<br />
event.currentTarget — 当前的Target（the current target）<br />
event.layerX — 跟currentTarget相关的X坐标（ the x coordinate, relative to the<br />
event.currentTarget）<br />
event.layerY — 跟currentTarget相关的Y坐标（ the y coordinate, relative to the<br />
event.currentTarget ）<br />
event.pageX — 当前View Point的X坐标（the x coordinate, relative to the view port）<br />
event.pageY — 当前View Point的Y坐标the y coordinate, relative to the view port<br />
event.relatedTarget — 对于onmouseover and onmouseout 时间，指鼠标进入或者退出的对象。（For onmouseover and onmouseout, the object that the mouse pointer is moving to or out of）<br />
event.charCode — 针对于keypress时间表示key code（ For keypress events, the character code of the key pressed ）</p>
<p>EventObject方法：<br />
event.preventDefault — 阻止了时间的默认行为（ prevent an event&#8217;s default behavior (e.g., a link from loading a new page) ）<br />
event.stopPropagation — 阻止了父Node的事件触发（ prevent an event from triggering a parent node&#8217;s event）</p>
<p>例如：<br />
&lt;script type=&#8221;text/javascript&#8221;&gt;</p>
<p>function echo(event) {<br />
key = event.charCode;<br />
console.debug(event.charCode);<br />
}</p>
<p>function foo(event) {<br />
dojo.stopEvent(event);<br />
console.debug(&#8220;The link was clicked&#8221;);<br />
}<br />
dojo.addOnLoad(function() {<br />
interactiveNode = dojo.byId(&#8220;interactive&#8221;);<br />
linkNode = dojo.byId(&#8220;link&#8221;);<br />
dojo.connect(interactiveNode, &#8216;onkeypress&#8217;, echo);<br />
dojo.connect(linkNode, &#8216;onclick&#8217;, foo);<br />
});<br />
&lt;/script&gt;<br />
&lt;body&gt;<br />
&lt;a href=&#8221;http://dojotoolkit.org&#8221; id=&#8221;link&#8221;&gt;Dojo&lt;/a&gt; is great.<br />
&lt;form&gt;<br />
&lt;label for=&#8221;infield&#8221;&gt; Type some text: &lt;/label&gt;<br />
&lt;input id=&#8221;interactive&#8221; type=&#8221;text&#8221; name=&#8221;infield&#8221;&gt;<br />
&lt;/form&gt;<br />
&lt;/body&gt;</p>
<p>Dijit组件和Event<br />
@TODO<br />
Topic<br />
@TODO</p>
<p>DojoAjax异步调用<br />
HelloWorld Dojo Ajax 程序<br />
我们做一个画面，在画面中使用ajax从服务器中取得动态的内容，将这些内容显示在页面中。<br />
首先我们在服务器上做一个txt文件，例如文件为ajax.txt，内容为：<br />
Hello World!<br />
This is a simple ajax text file.</p>
<p>然后做一个jsp画面，其中有一个div内容从服务器上的ajax.txt文件取得，代码为：<br />
&lt;%@ page language=&#8221;java&#8221; contentType=&#8221;text/html; charset=UTF-8&#8243;<br />
pageEncoding=&#8221;UTF-8&#8243;%&gt;<br />
&lt;!DOCTYPE html PUBLIC &#8220;-//W3C//DTD HTML 4.01 Transitional//EN&#8221; &#8220;http://www.w3.org/TR/html4/loose.dtd&#8221;&gt;<br />
&lt;html&gt;<br />
&lt;head&gt;<br />
&lt;meta http-equiv=&#8221;Content-Type&#8221; content=&#8221;text/html; charset=UTF-8&#8243;&gt;<br />
&lt;title&gt;Ajax Hello World!&lt;/title&gt;<br />
&lt;script type=&#8221;text/javascript&#8221;<br />
src=&#8221;&lt;%= request.getContextPath()%&gt;/dojo-0.9.0beta/dojo/dojo.js&#8221;&gt;<br />
&lt;!&#8211; ① &#8211;&gt;<br />
&lt;/script&gt;</p>
<p>&lt;script type=&#8221;text/javascript&#8221;&gt;<br />
function hello() {     &lt;!&#8211; ④ &#8211;&gt;<br />
dojo.xhrGet( {<br />
// The following URL must match that used to test the server.<br />
url: &#8220;http://localhost:8080/teamware/test/ajax.txt&#8221;,&lt;!&#8211; ⑤ &#8211;&gt;<br />
handleAs: &#8220;text&#8221;, &lt;!&#8211; ⑥ &#8211;&gt;</p>
<p>timeout: 5000, // Time in milliseconds</p>
<p>// The LOAD function will be called on a successful response.<br />
load: function(response, ioArgs) {     &lt;!&#8211; ⑦ &#8211;&gt;<br />
dojo.byId(&#8220;cargo&#8221;).innerHTML = response;<br />
return response;<br />
},</p>
<p>// The ERROR function will be called in an error case.<br />
error: function(response, ioArgs) {  &lt;!&#8211; ⑧ &#8211;&gt;<br />
console.error(&#8220;HTTP status code: &#8220;, ioArgs.xhr.status);<br />
return response;<br />
}<br />
});<br />
}<br />
&lt;/script&gt;</p>
<p>&lt;script type=&#8221;text/javascript&#8221;&gt;<br />
dojo.addOnLoad(hello); &lt;!&#8211; ② &#8211;&gt;<br />
&lt;/script&gt;</p>
<p>&lt;/head&gt;<br />
&lt;body&gt;<br />
&lt;div id=&#8221;cargo&#8221; style=&#8221;font-size: big&#8221;&gt;&lt;/div&gt; &lt;!&#8211; ③ &#8211;&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;</p>
<p>说明：<br />
① 引入dojo框架<br />
② 把方法hello注册到onload中，当画面全部装载以后运行该方法。<br />
③ 显示ajax.txt文件内容的div<br />
④ Ajax方法，取得服务器ajax.txt的内容，在cargo div中显示这些内容。<br />
⑤ 指向ajax.txt的url路径。<br />
⑥ 服务器文件类型<br />
⑦ Ajax调用成功的情况下，调用的方法，包括将ajax.txt文件中的内容放在div中<br />
⑧ 错误处理</p>
]]></content:encoded>
			<wfw:commentRss>http://www.result-search.com/sty/2009/04/23/dojotoolkit-introduce.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
