﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-&lt;h1&gt;&lt;font color="red" size="36"&gt;︻┳═一Java&lt;/font&gt;&lt;/h1&gt;-文章分类-Ajax</title><link>http://www.blogjava.net/rain1102/category/14841.html</link><description>&lt;b&gt;&lt;font color="#3C1435"&gt;08年奋斗目标：&lt;/font&gt;&lt;font color="maroon"&gt;赚钱买个房子！&lt;/font&gt;&lt;/b&gt;</description><language>zh-cn</language><lastBuildDate>Wed, 19 Mar 2008 12:30:32 GMT</lastBuildDate><pubDate>Wed, 19 Mar 2008 12:30:32 GMT</pubDate><ttl>60</ttl><item><title>ajax jsp 无刷新上传文件</title><link>http://www.blogjava.net/rain1102/articles/187170.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Wed, 19 Mar 2008 02:23:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/187170.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/187170.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/187170.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/187170.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/187170.html</trackback:ping><description><![CDATA[首先要说的就是 <span class="hilite1"><span class="hilite1">ajax</span></span> 是无法实现上传文件的，可以想一下<span class="hilite1"><span class="hilite1">ajax</span></span>与后台通信都是通过传递字符串，怎么能传递文件呢？其实出于安全考虑js是不能操作文件的，所以就不要再说用<span class="hilite1"><span class="hilite1">ajax</span></span>来实现文件的上传了，这是不可能的。<br />
&nbsp;&nbsp;&nbsp; 而本文实现的<span class="hilite2"><span class="hilite2">文件上传</span></span>也是无页面刷新的，可以说是一种"类似<span class="hilite1"><span class="hilite1">AJAX</span></span>"方法。<br />
&nbsp;&nbsp;&nbsp; 开始之前先说两句无关的，其实在<span class="hilite1"><span class="hilite1">ajax</span></span>出现之前，web应用也可以是无刷新的，那时大多通过IFrame来做到这一点。当然<span class="hilite1"><span class="hilite1">Ajax</span></span>出现之后，人们一窝蜂地投奔<span class="hilite1"><span class="hilite1">Ajax</span></span> 的阵营了，iFrame 就乏人问津了。但是用iFrame来实现无刷新上传文件确实一个很好的选择。ps：<span class="hilite1"><span class="hilite1">Ajax</span></span>技术基本上可以说是由google公司带起来的，但少Gmail中上传文件用的还是 IFrame，所以说使用IFrame来上传文件是最好的选择。<br />
&nbsp;&nbsp;&nbsp; 我在这里这里用的技术是jsp，其实asp，php等也是一样可以这么实现的<br />
&nbsp;&nbsp;&nbsp; 一共两个文件就可实现：index.html 和 upload.jsp<br />
--index.html<span>
<div class="dp-highlighter">
<ol class="dp-j">
    <li class="alt"><span><span>＜html＞ &nbsp;&nbsp;</span></span>
    <li class=""><span>＜body＞ &nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;</span>
    <li class=""><span>＜form&nbsp;action=</span><span class="string">"upload.jsp"</span><span>&nbsp;id=</span><span class="string">"form1"</span><span>&nbsp;name=</span><span class="string">"form1"</span><span>&nbsp;encType=</span><span class="string">"multipart/form-data"</span><span>&nbsp;&nbsp;method=</span><span class="string">"post"</span><span>&nbsp;target=</span><span class="string">"hidden_frame"</span><span>&nbsp;＞ &nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;＜input&nbsp;type=</span><span class="string">"file"</span><span>&nbsp;id=</span><span class="string">"file"</span><span>&nbsp;name=</span><span class="string">"file"</span><span>&nbsp;style=</span><span class="string">"width:450"</span><span>＞ &nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;＜INPUT&nbsp;type=</span><span class="string">"submit"</span><span>&nbsp;value=</span><span class="string">"上传文件"</span><span>＞＜span&nbsp;id=</span><span class="string">"msg"</span><span>＞＜/span＞ &nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;＜br＞ &nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;＜font&nbsp;color=</span><span class="string">"red"</span><span>＞支持JPG,JPEG,GIF,BMP,SWF,RMVB,RM,AVI文件的上传＜/font＞&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;＜iframe&nbsp;name='hidden_frame'&nbsp;id=</span><span class="string">"hidden_frame"</span><span>&nbsp;style='display:none'＞＜/iframe＞ &nbsp;&nbsp;</span>
    <li class=""><span>＜/form＞ &nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;</span>
    <li class=""><span>＜/body＞ &nbsp;&nbsp;</span>
    <li class="alt"><span>＜/html＞ &nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;</span>
    <li class="alt"><span>＜script&nbsp;type=</span><span class="string">"text/javascript"</span><span>＞ &nbsp;&nbsp;</span>
    <li class=""><span>function&nbsp;callback(msg) &nbsp;&nbsp;</span>
    <li class="alt"><span>{ &nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;document.getElementById(</span><span class="string">"file"</span><span>).outerHTML&nbsp;=&nbsp;document.getElementById(</span><span class="string">"file"</span><span>).outerHTML; &nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;document.getElementById(</span><span class="string">"msg"</span><span>).innerHTML&nbsp;=&nbsp;</span><span class="string">"＜font&nbsp;color=red＞"</span><span>+msg+</span><span class="string">"＜/font＞"</span><span>; &nbsp;&nbsp;</span>
    <li class=""><span>} &nbsp;&nbsp;</span>
    <li class="alt"><span>＜/script＞&nbsp;&nbsp;</span> </li>
</ol>
</div>
<br />
<br />
<font color="#000000">&nbsp;index.html 中主要要做的就是写一个 form 和 iframe ，并把 form 的 target 设为 iframe 的名字，注意要把 iframe 设为不可见，其他的都是正常的<span class="hilite2"><span class="hilite2">文件上传</span></span>的写法，这样刷新的页面就是这个隐藏的 Iframe ，而在 index.html 中是不会有页面刷新的，js的 callback 方法是回调方法。用于清空<span class="hilite2"><span class="hilite2">文件上传</span></span>框和显示后台信息，注意清空<span class="hilite2"><span class="hilite2">文件上传</span></span>框的方法，和普通方法有点不一样。</font><br />
<br />
--upload.jsp<br />
<div class="dp-highlighter">
<ol class="dp-j">
    <li class="alt"><span><span>＜%@&nbsp;page&nbsp;language=</span><span class="string">"<a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a>"</span><span>&nbsp;contentType=</span><span class="string">"text/html;&nbsp;charset=gb2312"</span><span>&nbsp;%＞ &nbsp;&nbsp;</span></span>
    <li class=""><span>＜%@&nbsp;page&nbsp;</span><span class="keyword">import</span><span>=</span><span class="string">"com.jspsmart.upload.SmartUpload"</span><span>%＞ &nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;</span>
    <li class=""><span>＜% &nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//新建一个SmartUpload对象 </span><span>&nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;SmartUpload&nbsp;su&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;SmartUpload(); &nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//上传初始化 </span><span>&nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;su.initialize(pageContext); &nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;设定上传限制 </span><span>&nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//1.限制每个上传文件的最大长度。 </span><span>&nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;su.setMaxFileSize(</span><span class="number">10000000</span><span>); &nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//2.限制总上传数据的长度。 </span><span>&nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;su.setTotalMaxFileSize(</span><span class="number">20000000</span><span>); &nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//3.设定允许上传的文件（通过扩展名限制）,仅允许doc,txt文件。 </span><span>&nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;su.setAllowedFilesList(</span><span class="string">"doc,txt,jpg,rar,mid,waw,mp3,gif"</span><span>); &nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">boolean</span><span>&nbsp;sign&nbsp;=&nbsp;</span><span class="keyword">true</span><span>; &nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//4.设定禁止上传的文件（通过扩展名限制）,禁止上传带有exe,bat,jsp,htm,html扩展名的文件和没有扩展名的文件。 </span><span>&nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">try</span><span>&nbsp;{ &nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;su.setDeniedFilesList(</span><span class="string">"exe,bat,jsp,htm,html"</span><span>); &nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//上传文件 </span><span>&nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;su.upload(); &nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//将上传文件保存到指定目录 </span><span>&nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;su.save(</span><span class="string">"c:\\"); </span>&nbsp;
    <li class="alt"><span>&nbsp;</span>
    <li class=""><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;catch&nbsp;(Exception&nbsp;e)&nbsp;{ </span>&nbsp;</span>
    <li class="alt"><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace(); </span>&nbsp;</span>
    <li class=""><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sign&nbsp;=&nbsp;false; </span>&nbsp;</span>
    <li class="alt"><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;} </span>&nbsp;</span>
    <li class=""><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;if(sign==true) </span>&nbsp;</span>
    <li class="alt"><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;{ </span>&nbsp;</span>
    <li class=""><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.println("</span><span>＜script＞parent.callback('upload&nbsp;file&nbsp;success')＜/script＞</span><span class="string">"); </span>&nbsp;</span>
    <li class="alt"><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;}else </span>&nbsp;</span>
    <li class=""><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;{ </span>&nbsp;</span>
    <li class="alt"><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.println("</span><span>＜script＞parent.callback('upload&nbsp;file&nbsp;error')＜/script＞"); &nbsp;&nbsp;</span></span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span>
    <li class="alt"><span>%＞ &nbsp;&nbsp;</span> </li>
</ol>
</div>
<br />
<br />
<br />
<br />
<font color="#000000">upload.jsp 中只要注意最后输出的格式就可以了。其实原理就是输出一段js代码到 iframe 中，然后在iframe中来控制它的父页面。<br />
<br />
&nbsp;&nbsp;&nbsp; OK，至此一个无刷新的页面上传组件就做好了，</font><font color="#800080"><font color="#000000">不要忘了在 WEB-INF/lib 下加上必须的 jspSmartUpload.jar 包</font></font><font color="#800080"><font color="#000000">。<br />
&nbsp;&nbsp;&nbsp; 需要说明的是使用Iframe来上传，状态栏还是会有刷新的，因为iframe 中的页面刷新了嘛，但是外部页面，就是你所看到的页面是没有刷新的，所以也可以说是类似<span class="hilite1"><span class="hilite1">Ajax</span></span>上传。</font></font></span><img src ="http://www.blogjava.net/rain1102/aggbug/187170.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2008-03-19 10:23 <a href="http://www.blogjava.net/rain1102/articles/187170.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Ajax.Updater </title><link>http://www.blogjava.net/rain1102/articles/187055.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Tue, 18 Mar 2008 09:49:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/187055.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/187055.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/187055.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/187055.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/187055.html</trackback:ping><description><![CDATA[<h3>Syntax<code><br />
&nbsp; new Ajax.Updater(container, url, options);<br />
// make a HTTP request to the specified URL and update the 'container' element.<br />
</code></h3>
<p>Note: to only update a div on success, you may optionally substitute a property list for a simply element id (ie {success:&#8217;div_name&#8217;} instead of &#8216;div_name&#8217;)</p>
<h3>Options</h3>
<table>
    <tbody>
        <tr>
            <td>Option</td>
            <td>Default value</td>
            <td>Description</td>
        </tr>
        <tr>
            <td>asynchronous</td>
            <td>true</td>
            <td>Type of request</td>
        </tr>
        <tr>
            <td>evalScripts</td>
            <td>false</td>
            <td>When set as &#8220;true&#8221;, scripts in requested url are evaluated</td>
        </tr>
        <tr>
            <td>method</td>
            <td>&#8216;post&#8217;</td>
            <td>Lets you decide whether to use Get or Post for the request to the server</td>
        </tr>
        <tr>
            <td>contentType</td>
            <td>&#8216;application/x-www-form-urlencoded&#8217;</td>
            <td>Allows you to set the content-type sent to the server</td>
        </tr>
        <tr>
            <td>encoding</td>
            <td>&#8216;UTF-8&#8217;</td>
            <td>Allows you to determine the encoding type information given to the server</td>
        </tr>
        <tr>
            <td>parameters</td>
            <td>&#8217;&#8217;</td>
            <td>Allows you to attach parameters to your <span class="caps">AJAX</span> request. Most common: parameters:Form.serialize(this)</td>
        </tr>
        <tr>
            <td>postBody</td>
            <td>&#8217;&#8217;</td>
            <td>Specify data to post. Something like: postBody:&#8217;thisvar=true&amp;thatvar=Howdy&#8217; How does this differ from parameters?</td>
        </tr>
        <tr>
            <td>username</td>
            <td>&#8217;&#8217;</td>
        </tr>
        <tr>
            <td>password</td>
            <td>&#8217;&#8217;</td>
        </tr>
        <tr>
            <td>requestHeaders</td>
            <td>&#8217;&#8217;</td>
            <td>Allows you to override the headers, see the <a href="http://www.prototypejs.org/api/ajax/options">Prototype <span class="caps">AJAX</span> options</a> for details</td>
        </tr>
        <tr>
            <td>onComplete</td>
            <td>&#8217;&#8217;</td>
            <td>Function to call on completion of request</td>
        </tr>
        <tr>
            <td>onSuccess</td>
            <td>&#8217;&#8217;</td>
            <td>Function to call on successful completion of request</td>
        </tr>
        <tr>
            <td>onFailure</td>
            <td>&#8217;&#8217;</td>
            <td>Function to call on failed request</td>
        </tr>
        <tr>
            <td>onException</td>
            <td>&#8217;&#8217;</td>
            <td>Function to call on failed request (e.g. attempted cross-site request)</td>
        </tr>
        <tr>
            <td>on + Status Code</td>
            <td>&#8217;&#8217;</td>
            <td>on404 etc. raise an event when given status code is encountered.</td>
        </tr>
        <tr>
            <td>insertion</td>
            <td>None</td>
            <td>Instead of inserting the response in the existing content (possibly overwriting it) you can pass a valid Insertion object, such as Insertion.Top, Insertion.Bottom, Insertion.Before or Insertion.After.</td>
        </tr>
    </tbody>
</table>
<p>Hint: If you have set evalScripts:true the script you call (the url parameter) must return a header of &#8216;Content-Type: text/javascript&#8217; else the browser will not execute it.</p><img src ="http://www.blogjava.net/rain1102/aggbug/187055.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2008-03-18 17:49 <a href="http://www.blogjava.net/rain1102/articles/187055.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在Struts 2中使用JSON Ajax支持</title><link>http://www.blogjava.net/rain1102/articles/180907.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Wed, 20 Feb 2008 09:02:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/180907.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/180907.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/180907.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/180907.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/180907.html</trackback:ping><description><![CDATA[JSON插件提供了一种名为json的ResultType，一旦为某个Action指定了一个类型为json的Result，则该Result无需映射到任何视图资源。因为JSON插件会负责将Action里的状态信息序列化成JSON格式的数据，并将该数据返回给客户端页面的JavaScript。
<p>　　简单地说，JSON插件允许我们在JavaScript中异步调用Action，而且Action不再需要使用视图资源来显示该Action里的状态信息，而是由JSON插件负责将Action里的状态信息返回给调用页面——通过这种方式，就可以完成Ajax交互。</p>
<p>　　Struts2提供了一种可插拔方式来管理插件，安装Struts2的JSON插件与安装普通插件并没有太大的区别，一样只需要将Struts2插件的JAR文件复制到Web应用的WEB-INF/lib路径下即可。</p>
<p>　　安装JSON插件按如下步骤进行：</p>
<p>　　(1)登陆http://code.google.com/p/jsonplugin/downloads/list站点，下载Struts2的JSON插件的最新版本，当前最新版本是0.7，我们可以下载该版本的JSON插件。</p>
<p>　　(2)将下载到的jsonplugin-0.7.jar文件复制到Web应用的WEB-INF路径下，即可完成JSON插件的安装。</p>
<p>　　<strong>实现Actio逻辑</strong></p>
<p>　　假设wo,en输入页面中包含了三个表单域，这三个表单域对于三个请求参数，因此应该使用Action来封装这三个请求参数。三个表单域的name分别为field1、field2和field3。</p>
<p>　　处理该请求的Action类代码如下：　　
<table style="border-right: #cccccc 1px dotted; table-layout: fixed; border-top: #cccccc 1px dotted; border-left: #cccccc 1px dotted; border-bottom: #cccccc 1px dotted" cellspacing="0" cellpadding="6" width="95%" align="center" border="0">
    <tbody>
        <tr>
            <td style="word-wrap: break-word" bgcolor="#f3f3f3">public&nbsp;class&nbsp;JSONExample <br />
            　　{ <br />
            　　//封装请求参数的三个属性 <br />
            　　private&nbsp;String&nbsp;field1; <br />
            　　private&nbsp;transient&nbsp;String&nbsp;field2; <br />
            　　private&nbsp;String&nbsp;field3; <br />
            　　//封装处理结果的属性 <br />
            　　private&nbsp;int[]&nbsp;ints&nbsp;=&nbsp;{10,&nbsp;20}; <br />
            　　private&nbsp;Map&nbsp;map&nbsp;=&nbsp;new&nbsp;HashMap(); <br />
            　　private&nbsp;String&nbsp;customName&nbsp;=&nbsp;"custom"; <br />
            　　//三个请求参数对应的setter和getter方法 <br />
            　　public&nbsp;String&nbsp;getField1() <br />
            　　{ <br />
            　　return&nbsp;field1; <br />
            　　} <br />
            　　public&nbsp;void&nbsp;setField1(String&nbsp;field1) <br />
            　　{ <br />
            　　this.field1&nbsp;=&nbsp;field1; <br />
            　　} <br />
            　　//此处省略了field1和field2两个字段的setter和getter方法 <br />
            　　... <br />
            　　//封装处理结果的属性的setter和getter方法 <br />
            　　public&nbsp;int[]&nbsp;getInts() <br />
            　　{ <br />
            　　return&nbsp;ints; <br />
            　　} <br />
            　　public&nbsp;void&nbsp;setInts(int[]&nbsp;ints) <br />
            　　{ <br />
            　　this.ints&nbsp;=&nbsp;ints; <br />
            　　} <br />
            　　public&nbsp;Map&nbsp;getMap() <br />
            　　{ <br />
            　　return&nbsp;map; <br />
            　　} <br />
            　　public&nbsp;void&nbsp;setMap(Map&nbsp;map) <br />
            　　{ <br />
            　　this.map&nbsp;=&nbsp;map; <br />
            　　} <br />
            　　//使用注释语法来改变该属性序列化后的属性名 <br />
            　　@JSON(name="newName") <br />
            　　public&nbsp;String&nbsp;getCustomName() <br />
            　　{ <br />
            　　return&nbsp;this.customName; <br />
            　　} <br />
            　　public&nbsp;String&nbsp;execute() <br />
            　　{ <br />
            　　map.put("name",&nbsp;"yeeku"); <br />
            　　return&nbsp;Action.SUCCESS; <br />
            　　} <br />
            　　}</td>
        </tr>
    </tbody>
</table>
　　在上面代码中，使用了JSON注释，注释时指定了name域，name域指定Action属性被序列化成JSON对象的属性名。除此之外，JSON注释还支持如下几个域：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; serialize：设置是否序列化该属性</p>
<p>　　deserialize：设置是否反序列化该属性。</p>
<p>　　format：设置用于格式化输出、解析日期表单域的格式。例如"yyyy-MM-dd'T'HH:mm:ss"。</p>
<p>　　配置该Action与配置普通Action存在小小的区别，应该为该Action配置类型为json的Result。而这个Result无需配置任何视图资源。</p>
<p>　　配置该Action的struts.xml文件代码如下：　
<table style="border-right: #cccccc 1px dotted; table-layout: fixed; border-top: #cccccc 1px dotted; border-left: #cccccc 1px dotted; border-bottom: #cccccc 1px dotted" cellspacing="0" cellpadding="6" width="95%" align="center" border="0">
    <tbody>
        <tr>
            <td style="word-wrap: break-word" bgcolor="#f3f3f3">＜?xml&nbsp;version="1.0"&nbsp;encoding="GBK"?＞ <br />
            ＜!DOCTYPE&nbsp;struts&nbsp;PUBLIC <br />
            "-//Apache&nbsp;Software&nbsp;Foundation//DTD&nbsp;Struts&nbsp;Configuration&nbsp;2.0//EN" <br />
            "http://struts.apache.org/dtds/struts-2.0.dtd"＞ <br />
            ＜struts＞ <br />
            ＜constant&nbsp;name="struts.i18n.encoding"&nbsp;value="UTF-8"/＞ <br />
            ＜package&nbsp;name="example"&nbsp;extends="json-default"＞ <br />
            ＜action&nbsp;name="JSONExample"&nbsp;class="lee.JSONExample"＞ <br />
            ＜result&nbsp;type="json"/＞ <br />
            ＜/action＞ <br />
            ＜/package＞ <br />
            ＜/struts＞　　</td>
        </tr>
    </tbody>
</table>
　　在上面配置文件中有两个值得注意的地方：<br />
<br />
　　第一个地方是配置struts.i18n.encoding常量时，不再是使用GBK编码，而是UTF-8编码，这是因为Ajax的POST请求都是以UTF-8的方式进行编码的。<br />
<br />
　　第二个地方是配置包时，自己的包继承了json-default包，而不再继承默认的default包，这是因为只有在该包下才有json类型的Result。</p><img src ="http://www.blogjava.net/rain1102/aggbug/180907.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2008-02-20 17:02 <a href="http://www.blogjava.net/rain1102/articles/180907.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JS常见的location及URL变量 </title><link>http://www.blogjava.net/rain1102/articles/174604.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Fri, 11 Jan 2008 05:29:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/174604.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/174604.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/174604.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/174604.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/174604.html</trackback:ping><description><![CDATA[<p>alert(location);<br />
alert(location.href);<br />
alert(location.search);<br />
alert(location.pathname);<br />
<br />
上面四个分别得到下面四个结果<br />
<br />
<a href="http://www.baidu.com/s/abc/d?ie=gb2312&amp;bs=baseURL&amp;sr=&amp;z=&amp;cl=3&amp;f=8&amp;wd=baseURL+IE+FF&amp;ct=0">http://www.baidu.com/s/abc/d?ie=gb2312&amp;bs=baseURL&amp;sr=&amp;z=&amp;cl=3&amp;f=8&amp;wd=baseURL+IE+FF&amp;ct=0</a><br />
http://www.baidu.com/s/abc/d?ie=gb2312&amp;bs=baseURL&amp;sr=&amp;z=&amp;cl=3&amp;f=8&amp;wd=baseURL+IE+FF&amp;ct=0<br />
?ie=gb2312&amp;bs=baseURL&amp;sr=&amp;z=&amp;cl=3&amp;f=8&amp;wd=baseURL+IE+FF&amp;ct=0<br />
/s/abc/d </p><img src ="http://www.blogjava.net/rain1102/aggbug/174604.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2008-01-11 13:29 <a href="http://www.blogjava.net/rain1102/articles/174604.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JavaFX发现之旅：JavaFX Script With Eclipse 入门（第一部分）</title><link>http://www.blogjava.net/rain1102/articles/173978.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Wed, 09 Jan 2008 05:20:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/173978.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/173978.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/173978.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/173978.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/173978.html</trackback:ping><description><![CDATA[<a href="http://blog.eshangrao.com/index.php/2007/05/16/391-javafx-script-javafx-script-with-eclipse" target="_blank">http://blog.eshangrao.com/index.php/2007/05/16/391-javafx-script-javafx-script-with-eclipse</a><img src ="http://www.blogjava.net/rain1102/aggbug/173978.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2008-01-09 13:20 <a href="http://www.blogjava.net/rain1102/articles/173978.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何在dwr的回调函数中传递多个参数</title><link>http://www.blogjava.net/rain1102/articles/171357.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Fri, 28 Dec 2007 15:42:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/171357.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/171357.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/171357.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/171357.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/171357.html</trackback:ping><description><![CDATA[function selectCountry(countryId) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var num = countryId.indexOf("Country");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var prefix = countryId.substr(0,num);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var countryId = document.getElementById(countryId).value;<br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; loveService.getProvincesByCountry(countryId, function(data){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #008000">callBackProvices(data,<span style="color: #ff0000">prefix</span>);<br />
</span>&nbsp;&nbsp;&nbsp;});<br />
&nbsp;&nbsp;&nbsp;resetProvince(prefix+"Province");<br />
&nbsp;&nbsp;&nbsp;resetCity(prefix+"City");<br />
&nbsp;&nbsp;}<br />
&nbsp;<br />
&nbsp;&nbsp;function <span style="color: #ff0000">callBackProvices(data, prefix)</span> {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var provinceId = prefix+'Province';<br />
&nbsp;&nbsp;&nbsp;DWRUtil.removeAllOptions(provinceId);<br />
&nbsp;&nbsp;&nbsp;DWRUtil.addOptions(provinceId, arrayObject, 'value', 'name');<br />
&nbsp;&nbsp;&nbsp;DWRUtil.addOptions(provinceId, data);<br />
&nbsp;&nbsp;}
<p>&nbsp;</p><img src ="http://www.blogjava.net/rain1102/aggbug/171357.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2007-12-28 23:42 <a href="http://www.blogjava.net/rain1102/articles/171357.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【教程】 jquery第一次亲密接触(转载)</title><link>http://www.blogjava.net/rain1102/articles/155641.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Wed, 24 Oct 2007 09:23:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/155641.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/155641.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/155641.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/155641.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/155641.html</trackback:ping><description><![CDATA[jquery是继prototype之后又一个优秀的Javascript框架。对prototype我使用不多，简单了解过。但使用上jquery之后，马上被她的优雅吸引住了。有人使用这样的一比喻来比较prototype和jquery：prototype就像Java，而jquery就像ruby.实际上我比较喜欢java（少接触Ruby罢了）但是jquery的简单的实用的确有相当大的吸引力啊！在项目里我把jquery作为自已唯一的框架类包。使用其间也有一点点心得，其实这些心得，在jquery的文档上面也可能有讲，不过还是记下来，以备忘罢。 <br />
一，找到你了！ <br />
还记得$()这个东西吧？prototype还是DWR都使用了这个函数代替document.getElementById()。没错，jquery也跟风了。为达到document.getElementById()的目的，jquery是这样写的： <br />
<br />
<br />
代码<br />
var someElement = $("#myId");&nbsp; <br />
<br />
<br />
看起来比其他两个框架的要多了一个#，好，看看下面的用法：<br />
<br />
<br />
代码<br />
$("div p");(1)&nbsp; <br />
$("div.container")(2)&nbsp; <br />
$("div #msg");(3)&nbsp; <br />
$("table a",context);(4)&nbsp; <br />
<br />
<br />
在prototype里看过这样的写法吗？第一行代码得到所有&lt;div&gt;标签下的&lt;p&gt;元素。第二行代码得到class为container的&lt;div&gt;元素,第三行代码得到&lt;div&gt;标签下面id为msg的元素。第四行代码得到context为上下文的table里面所有的连接元素。 <br />
如果你熟悉CSS，Xpath，你会觉得这些写法很眼熟！对了。正是。看出奥妙了吧。jquery就是通过这样的方式来找到Dom对象里面的元素。跟CSS的选择器相类似。 <br />
二，Jquery对象？ <br />
jquery提供了很多便利的函数，如each(fn)，但是使用这些函数的前提是：你使用的对象是Jquer对象。使一个Dom对象成为一个Jquery对象很简单，通过下面一些方式（只是一部分）： <br />
<br />
代码<br />
var a = $("#cid");(1)&nbsp; <br />
var b = $("&lt;p&gt;hello&lt;/p&gt;");(2)&nbsp; <br />
var c = document.createElement("table"); var tb = $(c);&nbsp; <br />
<br />
<br />
三，代替body标签的onload <br />
这个惯例，也许是除了$()之外，用得最多的地方了。下面一段代码： <br />
<br />
代码<br />
$(document).ready(function(){&nbsp; <br />
&nbsp; alert("hello");&nbsp; <br />
});(1)&nbsp; <br />
&nbsp; <br />
&lt;body onload="alert('hello');"&gt;（2）&nbsp; <br />
&nbsp; <br />
<br />
<br />
上面两段代码是等价的。但代码1的好处是做到表现和逻辑分离。并且可以在不同的js文件中做相同的操作，即$(document).ready(fn)可以在一个页面中重复出现，而不会冲突。基本上Jqeury的很多plugin都是利用这个特性，正因为这个特性，多个plugin共同使用起来，在初始化时不会发生冲突。 <br />
不管怎么说，这个惯例可以分离javascript与HTML。推荐使用。 <br />
四，事件机制 <br />
我大量使用的事件可能就是button的onclick了。以前习惯在input 元素上写onclick = "fn()",使用jquery可以使javascript代码与html代码分离，保持HTML的清洁，还可以很轻松地绑定事件，甚至你可以不知道&#8220;事件&#8221;这个名词。 <br />
<br />
代码<br />
$(document).ready(function(){&nbsp; <br />
&nbsp; $("#clear").click(function(){&nbsp; <br />
&nbsp; &nbsp; alert("i am about to clear the table");&nbsp; &nbsp; <br />
&nbsp; });&nbsp; <br />
&nbsp; $("form[0]").submit(validate);&nbsp; <br />
});&nbsp; <br />
function validate(){&nbsp; <br />
&nbsp; //do some form validation&nbsp; <br />
}&nbsp; <br />
<br />
<br />
五，同一函数实现set&amp;get <br />
<br />
代码<br />
$("#msg").html();&nbsp; <br />
$("#msg").html("hello");&nbsp; <br />
<br />
<br />
上面两行代码，调用了同样的函数。但结果却差别很大。 <br />
第一行是返回指定元素的HTML值，第二行则是将hello这串字符设置到指定元素中。jquery的函数大部分有这样的特性。 <br />
六，ajax <br />
这是一个ajax横行的时代。多少人，了不了解ajax的都跟着用上一把。呵。使用jquery实现ajax同样简单异常 <br />
<br />
代码<br />
$.get("search.do",{id:1},rend);&nbsp; <br />
function rend(xml){&nbsp; <br />
&nbsp; &nbsp; alert(xml);&nbsp; <br />
} (1)&nbsp; <br />
$.post("search.do",{id:1},rend);&nbsp; <br />
function rend(xml){&nbsp; <br />
&nbsp; &nbsp; alert(xml);&nbsp; <br />
} (2)&nbsp; <br />
&nbsp; <br />
$("#msg").ajaxStart(function(){&nbsp; <br />
&nbsp; this.html("正在加载。。。。");&nbsp; <br />
});(3)&nbsp; <br />
$("#msg").ajaxSuccess(function(){&nbsp; <br />
&nbsp; this.html("加载完成！");&nbsp; <br />
});(4)&nbsp; <br />
<br />
<br />
这些都是较常用的方法，get和post用法一样。第一个参数是异步请求的url，第二个为参数，第三个回调方法。 <br />
3，4的方法会在指定的Dom对象上绑定响应ajax执行的事件。当然，jquery的AJAX相关的函数不仅是这些，有兴趣可以去研究再多。 <br />
七，渐入淡出 <br />
<br />
代码<br />
$("#msg").fadeIn("fast");&nbsp; <br />
$("#msg").fadeOut("slow");&nbsp; <br />
<br />
<br />
没错，上面两行代码已经分别实现了一个id为Msg的jquery对象的渐入和淡出。做一个像Gmail一样的动态加载通知条，用jquery就那么简单。两个函数接受的参数除了快慢等，还可以接收整型，作为渐入或淡出的完成时间，单位为MS。 <br />
八，plugin <br />
这也是一个插件的时代。 <br />
jquery插件给我的感觉清一色的清洁，简单。如Jtip，要使用它的功能，只需要在你的元素的class上加上Jtip,并引入jtip.js及其样式即可以了。其他事情插件全包。我喜欢jquery的一个重要原因是发现她已经有了很多很好，很精彩的插件。<br />
<br />
写得很烂。可能大家看不出jquery的好处。嗯，光听是没用的，试用一下吧。你会发觉很有趣。 <br />
暂时告一段落吧。待有新的发现再来分享。<br />
<br />
加一些Jquery的资源： <br />
<a href="http://www.visualjquery.com/index.xml" target="_blank">http://www.visualjquery.com/index.xml</a> 很好的API查询站点 <br />
<a href="http://jquery.com/demo/thickbox/" target="_blank">http://jquery.com/demo/thickbox/</a> 知道lightBox吧，看看Jquery是怎样实现相同的东西 <br />
<a href="http://www.codylindley.com/blogstuff/js/jtip/" target="_blank">http://www.codylindley.com/blogstuff/js/jtip/</a> Jtip，实用的提示工具 <br />
<a href="http://jquery.com/plugins/" target="_blank">http://jquery.com/plugins/</a> 很多牛的插件。 <br />
<br />
<a href="http://15daysofjquery.com/" target="_blank">http://15daysofjquery.com</a><br /><img src ="http://www.blogjava.net/rain1102/aggbug/155641.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2007-10-24 17:23 <a href="http://www.blogjava.net/rain1102/articles/155641.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Ajax-------IE和FIREFOX 脚本的一些区别</title><link>http://www.blogjava.net/rain1102/articles/96085.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Fri, 26 Jan 2007 01:51:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/96085.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/96085.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/96085.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/96085.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/96085.html</trackback:ping><description><![CDATA[<p>
				<font face="verdana, arial, helvetica" size="2">
						<span class="javascript" id="text6696983" style="FONT-SIZE: 12px">用AJAX开发 不可避免的要遇到浏览器不同，实现不同的问题，下面是AoiUmi的一些总结。<br /><br />1：innerText<br />IE支持，FIREFOX不支持<br />解决办法：用innerHTML,2种浏览器都识别innerHTML<br /><br />2：document.createElement<br />document.appendChild<br />在往表里插入行时<br />FIREFOX支持，IE不支持<br />解决办法：把行插入到TBODY中，不要直接插入到表<br /><br />3：setAttribute('style','color:red;')<br />FIREFOX支持(除了IE，现在所有浏览器都支持)，IE不支持<br />解决办法：不用setAttribute('style','color:red')<br />而用object.style.cssText = 'color:red;'(这写法也有例外)<br />最好的办法是上面种方法都用上，万无一失 ^_^<br />4:class<br />setAttribute('class','styleClass')<br />FIREFOX支持，IE不支持(指定属性名为CLASS，IE不会设置元素的CLASS属性，相反只使用SETATTRIBUTE时IE自动识别CLASSNAME属性)<br />解决办法：<br />setAttribute('class','styleClass')<br />setAttribute('className','styleClass')<br />2种都用上<br /><br />5:用setAttribute设置事件<br />var obj = document.getElementById('objId');<br />obj.setAttribute('onclick','funcitonname();');<br />FIREFOX支持，IE不支持<br />解决办法：<br />IE中必须用点记法来引用所需的事件处理程序,并且要用赋予匿名函数<br />如下：<br />var obj = document.getElementById('objId');<br />obj.onclick=function(){fucntionname();};<br />这种方法所有浏览器都支持<br /><br />6：建立单选钮<br />IE以外的浏览器<br />var rdo = document.createElement('input');<br />rdo.setAttribute('type','radio');<br />rdo.setAttribute('name','radiobtn');<br />rdo.setAttribute('value','checked');<br /><br />IE:<br />var rdo =document.createElement("&lt;input type='radio' name='radiobtn' value='checked'&gt;");<br />解决办法：<br />这一点区别和前面的都不一样。这次完全不同，所以找不到共同的办法来解决，那么只有IF-ELSE了<br />万幸的是，IE可以识别出document的uniqueID属性，别的浏览器都不可以识别出这一属性。问题解决。<br /><br />0：共同的一些技巧<br />在动态建立INPUT型输入元素时，一般是先加入，在设置TYPE。这就有可能出错<br /><br />好习惯：var btn = document.createElement('input');<br />btn.setAttribut('type','button');<br />document.getElementById('formId').appendChild(btn);</span>
				</font>
		</p><img src ="http://www.blogjava.net/rain1102/aggbug/96085.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2007-01-26 09:51 <a href="http://www.blogjava.net/rain1102/articles/96085.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>dojo.graphics.color &amp; dojo.uri.Uri</title><link>http://www.blogjava.net/rain1102/articles/94429.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Wed, 17 Jan 2007 07:34:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/94429.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/94429.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/94429.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/94429.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/94429.html</trackback:ping><description><![CDATA[模块：dojo.graphics.color
<p><br />下面是dojo里定义的颜色名称<br />dojo.graphics.color.named.white //白色<br />dojo.graphics.color.named.black //黑色<br />dojo.graphics.color.named.red //红色<br />dojo.graphics.color.named.green //绿色<br />dojo.graphics.color.named.blue //蓝色<br />dojo.graphics.color.named.navy //海军蓝<br />dojo.graphics.color.named.gray //灰色<br />dojo.graphics.color.named.silver//银色</p><p><br />dojo.graphics.color.Color</p><p>颜色类</p><p><br />Usage Example:</p><p><br />var color = new dojo.graphics.color.Color(dojo.graphics.color.named.black); //定义一个黑色的颜色对象<br />var color = new dojo.graphics.color.Color(0,0,0); //定义一个黑色的颜色对象<br />var color = new dojo.graphics.color.Color(0,0,0,1.0); //定义一个黑色的颜色对象<br />var color = new dojo.graphics.color.Color([0,0,0,1.0]); //定义一个黑色的颜色对象<br />var color = new dojo.graphics.color.Color('rgb(0,0,0)'); //定义一个黑色的颜色对象<br />var color = new dojo.graphics.color.Color('#000000'); //定义一个黑色的颜色对象</p><p><br /><br />dojo.graphics.color.Color.toRgb</p><p><br />Usage Example:</p><p><br />color.toRgb();  //返回一个[0,0,0]的数组<br />color.toRgb(true); //返回一个[0,0,0,1.0]的数组</p><p><br /><br />dojo.graphics.color.Color.toRgba</p><p><br />Usage Example:</p><p><br />color.toRgba();  //返回一个[0,0,0,1.0]的数组</p><p><br /><br />dojo.graphics.color.Color.toHex<br />dojo.graphics.color.Color.toString</p><p><br />Usage Example:</p><p><br />color.toHex();  //返回"#000000"<br />color.toString(); //返回"#000000"</p><p><br /><br />dojo.graphics.color.Color.toCss</p><p><br />Usage Example:</p><p><br />color.toCss();  //返回"rgb(0,0,0)"</p><p><br /><br />dojo.graphics.color.Color.blend</p><p><br />混合另一个颜色得到一个新颜色</p><p><br />Usage Example:<br /><br />color.blend('#ffffff', 1); //返回[255,255,255]<br />color.blend('#ffffff', -1); //返回[0,0,0]<br />color.blend('#ffffff', 0); //按1比1混合黑色和白色，返回[127,127,127]<br />颜色参数可以为颜色的任意形式，比如数组，字符串等</p><p><br />or</p><p><br />dojo.graphics.color.blend([0,0,0], [255,255,255], 0); //will return [127,127,127]<br />dojo.graphics.color.blend("#000000", "#ffffff", 0); //will return "#7f7f7f"<br />若第一个参数为字符串，则返回值也会返回字符串</p><p><br /><br />dojo.graphics.color.Color.blendHex</p><p><br />Usage Example:</p><p><br />dojo.graphics.color.blendHex("#000000", "#ffffff", 0); //will return "#7f7f7f"</p><p><br /><br />dojo.graphics.color.extractRGB</p><p><br />将输入转换为RGB数组</p><p><br />dojo.graphics.color.hex2rgb</p><p><br />将输入的字符串转换为RGB数组</p><p><br />dojo.graphics.color.rgb2hex</p><p><br />将输入的RGB数组转换为字符串</p><p><br /><br />dojo.graphics.color.Color.fromArray</p><p><br />Usage Example:</p><p><br />var color = dojo.graphics.color.Color.fromArray([0,0,0,1.0]);</p><p><br /><br />模块：dojo.uri.Uri</p><p><br />dojo.uri.Uri</p><p><br />专门用来处理URI(统一资源标识符)的类</p><p><br />Usage Example:</p><p><br />uri = (new dojo.uri.Uri("<a href="http://myserver/dojo/"><font color="#003366">http://myserver/dojo/</font></a>", "guide.html")).toString(); //uri will be "<a href="http://myserver/dojo/guide.html"><font color="#003366">http://myserver/dojo/guide.html</font></a>"<br />uri = (new dojo.uri.Uri("<a href="http://myserver/dojo/"><font color="#003366">http://myserver/dojo/</font></a>", "../guide.html")).toString(); //uri will be "<a href="http://myserver/guide.html"><font color="#003366">http://myserver/guide.html</font></a>"</p><p><br />RFC规定的URI语法：[scheme:][//authority][path][?query][#fragment]<br />authority语法：[user-info@]host[:port]</p><p><br />比如我们定义一个uri<br /><br />var uri = new dojo.uri.Uri("<a href="http://user:password@myserver/dojo/"><font color="#003366">http://user:password@myserver:80/dojo/</font></a>", "guide.html?page=1#top");</p><p><br />则uri的属性如下：</p><p><br />authority: 服务器名 "user:password@myserver:80"<br />fragment: 片断名 "top"<br />host: 主机名 "myserver"<br />password: 密码 "password"<br />path: 路径 "/dojo/guide.html"<br />port: 端口 80<br />query: 参数 "page=1"<br />scheme: 模式 "http"<br />uri: 完整的地址 "<a href="http://user:password@myserver/dojo/guide.html?page=1"><font color="#003366">http://user:password@myserver:80/dojo/guide.html?page=1</font></a>"<br />user: 用户名 "user:" 似乎有点问题，多了一个冒号<br /></p><img src ="http://www.blogjava.net/rain1102/aggbug/94429.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2007-01-17 15:34 <a href="http://www.blogjava.net/rain1102/articles/94429.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>dojo.event &amp; dojo.event.topic &amp; dojo.event.browser</title><link>http://www.blogjava.net/rain1102/articles/94424.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Wed, 17 Jan 2007 07:26:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/94424.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/94424.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/94424.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/94424.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/94424.html</trackback:ping><description><![CDATA[<p>模块：dojo.event</p>
		<p>终于进入有名的dojo事件处理系统的学习了，学习前建议读者先去补习一下AOP的相关知识</p>
		<p>dojo.event.connect</p>
		<p>绑定指定的方法到指定的对象的方法上</p>
		<p>Usage Example:</p>
		<p>简单绑定1</p>
		<p>function doOnClick1()<br />{<br /> alert("Clicked!");<br />}<br />dojo.event.connect(dojo.byId("inputTest"),"onclick","doOnClick1");</p>
		<p>简单绑定2</p>
		<p>obj = { doOnClick2: function(){ alert("Clicked!");}}<br />dojo.event.connect(dojo.byId("inputTest"),"onclick",obj,"doOnClick2");</p>
		<p>如果存在需要进行多个事件的绑定的时候，你就会看到dojo的方便之处了</p>
		<p>obj2 = { doOnClick2: function(){alert("Clicked!");}}<br />dojo.event.connect(dojo.byId("inputTest"),"onclick",obj,"doOnClick2");<br />dojo.event.connect(dojo.byId("inputTest"),"onclick",obj2,"doOnClick2");</p>
		<p>connect可以对任何对象的方法进行绑定，而不是只能针对DOM对象</p>
		<p>dojo.event.connect(obj,"doOnclick2","doOnClick1"); //在调用obj.doOnclick2()后调用doOnClick1()</p>
		<p>
				<br />dojo.event.connectBefore</p>
		<p>dojo.event.connect默认是后绑定，connectBefore则是早绑定，绑定的方法将在指定方法前执行，用法与connect一致</p>
		<p>
				<br />dojo.event.connectAround</p>
		<p>Usage Example:</p>
		<p>function aroundTest(invocation){<br />  //此处可以增加代码，比如检查参数(invocation.args)<br />  var result = invocation.proceed();<br />  //此处可以增加代码，比如修改结果(result)<br />  return result;<br />}<br />dojo.event.connectAround(dojo.byId("inputTest"),"onclick","aroundTest");</p>
		<p>
				<br />dojo.event.connectOnce<br />说起这个函数，还真的是让我想了半天，直觉上我就把它想象成executeOnce，结果测试的结果让我差点想不通<br />connectOnce就是指保证只绑定一次，来避免重复绑定会导致的重复执行的问题</p>
		<p>
				<br />dojo.event.disconnect</p>
		<p>解除绑定，调用参数与connect一致，即可解除之前的绑定操作</p>
		<p>
				<br />dojo.event.log</p>
		<p>在执行指定对象的指定方法后自动记录日志</p>
		<p>Usage Example:</p>
		<p>dojo.event.log(obj, "doOnClick"); //当调用obj.doOnClick时记录下日志"DEBUG:  ([object Object]).doOnClick : "</p>
		<p>你也可以这样写：</p>
		<p>dojo.event.log({srcObj: obj, srcFunc: "doOnClick"});</p>
		<p>
				<br />dojo.event.kwConnect</p>
		<p>kwConnect可以做到更加灵活的绑定，比如可以设置延迟执行绑定</p>
		<p>Usage Example:</p>
		<p>dojo.event.kwConnect({<br />  srcObj: dojo.byId("inputTest"),<br />  srcFunc: "onclick",<br />  adviceObj: obj,<br />  adviceFunc: "doOnclick2",</p>
		<p>  type: "before", //默认为"after"，可选: "before", "around"，注意：type是用来决定adviceFunc的行为的，如果为"around"，则aroundFunc将失效<br />  aroundObj: null,<br />  aroundFunc: null, //如果指定了aroundFunc，则其将对adviceFunc进行拦截，但是当type为"around"时，则aroundFunc将不会执行<br />  once: false, //默认为false，允许重复绑定<br />  delay: 3000, //延时3秒后执行adviceFunc<br />  rate: 0, //这个从源代码没有看懂起什么作用<br />  adviceMsg: false //这个从源代码没有看懂起什么作用<br />});</p>
		<p>
				<br />dojo.event.kwDisconnect</p>
		<p>用来解除使用kwConnect指定的绑定</p>
		<p>
				<br />模块：dojo.event.topic</p>
		<p>Topic机制与Advice机制都能够实现事件的绑定，但是显然,Topic更适合处理多重绑定。<br />发布主题，然后由用户订阅的机制就是一个典型的观察者模式</p>
		<p>dojo.event.topic.registerPublisher</p>
		<p>注册主题发布器</p>
		<p>Usage Example:</p>
		<p>dojo.event.topic.registerPublisher("myTopic", obj, "doOnClick2");</p>
		<p>
				<br />dojo.event.topic.subscribe</p>
		<p>订阅主题</p>
		<p>Usage Example:</p>
		<p>dojo.event.topic.subscribe("myTopic", "test"); //执行obj.doOnClick2()以后会自动执行test()</p>
		<p>
				<br />dojo.event.topic.unsubscribe</p>
		<p>取消订阅主题</p>
		<p>Usage Example:</p>
		<p>dojo.event.topic.unsubscribe("myTopic", "test");</p>
		<p>
				<br />dojo.event.topic.destroy</p>
		<p>删除主题，此主题所有的订阅都将失效</p>
		<p>Usage Example:</p>
		<p>dojo.event.topic.destroy("myTopic");</p>
		<p>
				<br />模块：dojo.event.browser</p>
		<p>dojo.event.browser.addListener</p>
		<p>增加监听器</p>
		<p>Usage Example:</p>
		<p>function listener()<br />{<br />  alert("ok");<br />}<br />dojo.event.browser.addListener(document, 'mousedown', listener); //事件名称可以加上"on"，也可以没有"on"<br />dojo.event.browser.addListener(document, 'onmousedown', listener, true); //capture为真表示不受上层元素的事件控制</p>
		<p>
				<br />dojo.event.browser.removeListener</p>
		<p>清除监听器(这个方法似乎是无效的)</p>
		<p>
				<br />dojo.event.browser.callListener</p>
		<p>调用监听器</p>
		<p>Usage Example:</p>
		<p>dojo.event.browser.callListener(listener, document);</p>
		<p>
				<br />dojo.event.browser.stopPropagation</p>
		<p>阻止Event传播</p>
		<p>Usage Example:</p>
		<p>dojo.event.browser.stopPropagation();</p>
		<p>
				<br />dojo.event.browser.preventDefault</p>
		<p>将当前事件的返回值设置为false</p>
		<p>Usage Example:</p>
		<p>dojo.event.browser.preventDefault();</p>
		<p>
				<br />dojo.event.browser.keys</p>
		<p>键定义:<br />  KEY_BACKSPACE: 8,<br />  KEY_TAB: 9,<br />  KEY_ENTER: 13,<br />  KEY_SHIFT: 16,<br />  KEY_CTRL: 17,<br />  KEY_ALT: 18,<br />  KEY_PAUSE: 19,<br />  KEY_CAPS_LOCK: 20,<br />  KEY_ESCAPE: 27,<br />  KEY_SPACE: 32,<br />  KEY_PAGE_UP: 33,<br />  KEY_PAGE_DOWN: 34,<br />  KEY_END: 35,<br />  KEY_HOME: 36,<br />  KEY_LEFT_ARROW: 37,<br />  KEY_UP_ARROW: 38,<br />  KEY_RIGHT_ARROW: 39,<br />  KEY_DOWN_ARROW: 40,<br />  KEY_INSERT: 45,<br />  KEY_DELETE: 46,<br />  KEY_LEFT_WINDOW: 91,<br />  KEY_RIGHT_WINDOW: 92,<br />  KEY_SELECT: 93,<br />  KEY_F1: 112,<br />  KEY_F2: 113,<br />  KEY_F3: 114,<br />  KEY_F4: 115,<br />  KEY_F5: 116,<br />  KEY_F6: 117,<br />  KEY_F7: 118,<br />  KEY_F8: 119,<br />  KEY_F9: 120,<br />  KEY_F10: 121,<br />  KEY_F11: 122,<br />  KEY_F12: 123,<br />  KEY_NUM_LOCK: 144,<br />  KEY_SCROLL_LOCK: 145</p>
		<p>
				<br />dojo.event.browser.currentEvent</p>
		<p>最近一次的Event，其属性包括：</p>
		<p>altKey  //检查alt键的状态，当alt键按下时，值为 true<br />button  //检查按下的鼠标键，0 没按键，1 按左键，2 按右键，3 按左右键，4 按中间键，5 按左键和中间键，6 按右键和中间键，7 按所有的键<br />  //这个属性仅用于onmousedown, onmouseup, 和 onmousemove 事件。对其他事件，不管鼠标状态如何，都返回 0（比如onclick）<br />clientX  //返回鼠标在窗口客户区域中的X坐标<br />clientY  //返回鼠标在窗口客户区域中的Y坐标<br />ctrlKey  //检查ctrl键的状态，当ctrl键按下时，值为 true <br />fromElement //检测 onmouseover 和 onmouseout 事件发生时，鼠标所离开的元素<br />keyCode  //检测键盘事件相对应的内码，仅当type为keydown,keyup,keypress时才有效<br />offsetX  //检查相对于触发事件的对象，鼠标位置的水平坐标<br />offsetY  //检查相对于触发事件的对象，鼠标位置的垂直坐标<br />propertyName //设置或返回元素的变化了的属性的名称，你可以通过使用 onpropertychange 事件，得到 propertyName 的值<br />screenX  //检测鼠标相对于用户屏幕的水平位置<br />screenY  //检测鼠标相对于用户屏幕的垂直位置<br />shiftKey //检查shift键的状态，当shift键按下时，值为true<br />srcElement //返回触发事件的元素<br />srcFilter //返回触发 onfilterchange 事件的滤镜<br />toElement //检测 onmouseover 和 onmouseout 事件发生时，鼠标所进入的元素<br />type  //返回没有“on”作为前缀的事件名，比如click, mousedown<br />x  //返回鼠标相对于css属性中有position属性的上级元素的x轴坐标。如果没有css属性中有position属性的上级元素，默认以BODY元素作为参考对象<br />y  //返回鼠标相对于css属性中有position属性的上级元素的y轴坐标。如果没有css属性中有position属性的上级元素，默认以BODY元素作为参考对象<br />target  //同srcElement<br />currentTarget<br />layerX  //同offsetX<br />layerY  //同offsetY<br />pageX  //无水平滚动条的情况下与clientX同<br />pageY  //无水平滚动条的情况下与clientY同<br />relatedTarget // 仅当type为mouseover,mouseout时才有效<br />keys  //与dojo.event.browser.keys相同，仅当type为keydown,keyup,keypress时才有效<br />charCode //键值，仅当type为keypress时才有效</p>
		<p>
				<br />dojo.event.browser.isEvent</p>
		<p>判断指定对象是否为event对象</p>
		<p>Usage Example:</p>
		<p>dojo.event.browser.isEvent(dojo.event.browser.currentEvent); //当dojo.event.browser.currentEvent不为null时返回true<br /></p><img src ="http://www.blogjava.net/rain1102/aggbug/94424.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2007-01-17 15:26 <a href="http://www.blogjava.net/rain1102/articles/94424.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>dojo.dom</title><link>http://www.blogjava.net/rain1102/articles/94391.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Wed, 17 Jan 2007 03:36:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/94391.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/94391.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/94391.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/94391.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/94391.html</trackback:ping><description><![CDATA[<p>模块：dojo.dom</p>
		<p>dojo.dom.isNode</p>
		<p>测试指定对象是否为节点</p>
		<p>Usage Example:</p>
		<p>dojo.dom.isNode(dojo.byId('edtTitle'));</p>
		<p>
				<br />dojo.dom.getUniqueId</p>
		<p>取得唯一id</p>
		<p>Usage Example:</p>
		<p>dojo.dom.getUniqueId();  //will return dj_unique_#</p>
		<p>
				<br />dojo.dom.firstElement = dojo.dom.getFirstChildElement</p>
		<p>取得指定节点下的第一个满足指定Tag条件的子节点</p>
		<p>Usage Example:</p>
		<p>dojo.dom.firstElement(parentNode, 'SPAN');</p>
		<p>
				<br />dojo.dom.lastElement = dojo.dom.getLastChildElement</p>
		<p>取得指定节点下的最后一个满足指定Tag条件的子节点</p>
		<p>Usage Example:</p>
		<p>dojo.dom.lastElement(parentNode, 'SPAN');</p>
		<p>
				<br />dojo.dom.nextElement = dojo.dom.getNextSiblingElement</p>
		<p>取得指定节点的下一个满足指定Tag条件的子节点</p>
		<p>Usage Example:</p>
		<p>dojo.dom.nextElement(node, 'SPAN');</p>
		<p>
				<br />dojo.dom.prevElement = dojo.dom.getPreviousSiblingElement</p>
		<p>取得指定节点的前一个满足指定Tag条件的子节点</p>
		<p>Usage Example:</p>
		<p>dojo.dom.prevElement(node, 'SPAN');</p>
		<p>
				<br />dojo.dom.moveChildren</p>
		<p>把指定节点下的所有子节点移动到目标节点下，并返回移动的节点数</p>
		<p>Usage Example:</p>
		<p>dojo.dom.moveChildren(srcNode, destNode, true); //仅移动子节点，srcNode中的文字将被丢弃<br />dojo.dom.moveChildren(srcNode, destNode, false);//包括文字和子节点都将被移动到目标节点下</p>
		<p>
				<br />dojo.dom.copyChildren</p>
		<p>把指定节点下的所有子节点复制到目标节点下，并返回复制的节点数</p>
		<p>Usage Example:</p>
		<p>dojo.dom.moveChildren(srcNode, destNode, true); //仅复制子节点，srcNode中的文字将被忽略<br />dojo.dom.moveChildren(srcNode, destNode, false);//包括文字和子节点都将被复制到目标节点下</p>
		<p>
				<br />dojo.dom.removeChildren</p>
		<p>删除指定节点下的所有子节点，并返回删除的节点数</p>
		<p>Usage Example:</p>
		<p>dojo.dom.moveChildren(node);</p>
		<p>
				<br />dojo.dom.replaceChildren</p>
		<p>用指定的新节点替换父节点下的所有子节点</p>
		<p>Usage Example:</p>
		<p>dojo.dom.replaceChildren(node, newChild); //目前还不支持newChild为数组形式</p>
		<p>
				<br />dojo.dom.removeNode</p>
		<p>删除指定的节点</p>
		<p>Usage Example:</p>
		<p>dojo.dom.removeNode(node);</p>
		<p>
				<br />dojo.dom.getAncestors</p>
		<p>返回指定节点的父节点集合</p>
		<p>Usage Example:</p>
		<p>dojo.dom.getAncestors(node, null, false); //返回所有的父节点集合（包括指定的节点node）<br />dojo.dom.getAncestors(node, null, true); //返回最近的一个父节点<br />dojo.dom.getAncestors(node, function(el){/* 此处增加过滤条件 */return true}, false); //返回所有满足条件的父节点集合</p>
		<p>
				<br />dojo.dom.getAncestorsByTag</p>
		<p>返回所有符合指定Tag的指定节点的父节点集合</p>
		<p>Usage Example:</p>
		<p>dojo.dom.getAncestorsByTag(node, 'span', false); //返回所有的类型为SPAN的父节点集合<br />dojo.dom.getAncestorsByTag(node, 'span', true);  //返回最近的一个类型为SPAN的父节点</p>
		<p>
				<br />dojo.dom.getFirstAncestorByTag</p>
		<p>返回最近的一个符合指定Tag的指定节点的父节点</p>
		<p>Usage Example:</p>
		<p>dojo.dom.getFirstAncestorByTag(node, 'span'); //返回最近的一个类型为SPAN的父节点</p>
		<p>
				<br />dojo.dom.isDescendantOf</p>
		<p>判断指定的节点是否为另一个节点的子孙</p>
		<p>Usage Example:</p>
		<p>dojo.dom.isDescendantOf(node, ancestor, true); //判断node是否为ancestor的子孙<br />dojo.dom.isDescendantOf(node, node, false); //will return true<br />dojo.dom.isDescendantOf(node, node, true); //will return false</p>
		<p>
				<br />dojo.dom.innerXML</p>
		<p>返回指定节点的XML</p>
		<p>Usage Example:</p>
		<p>dojo.dom.innerXML(node);</p>
		<p>
				<br />dojo.dom.createDocument</p>
		<p>创建一个空的文档对象</p>
		<p>Usage Example:</p>
		<p>dojo.dom.createDocument();</p>
		<p>
				<br />dojo.dom.createDocumentFromText</p>
		<p>根据文字创建一个文档对象</p>
		<p>Usage Example:</p>
		<p>dojo.dom.createDocumentFromText('&lt;?xml version="1.0" encoding="gb2312" ?&gt;&lt;a&gt;1&lt;/a&gt;','text/xml');</p>
		<p>
				<br />dojo.dom.prependChild</p>
		<p>将指定的节点插入到父节点的最前面</p>
		<p>Usage Example:</p>
		<p>dojo.dom.prependChild(node, parent);</p>
		<p>
				<br />dojo.dom.insertBefore</p>
		<p>将指定的节点插入到参考节点的前面</p>
		<p>Usage Example:</p>
		<p>dojo.dom.insertBefore(node, ref, false); //如果满足要求的话就直接退出<br />dojo.dom.insertBefore(node, ref, true);</p>
		<p>
				<br />dojo.dom.insertAfter</p>
		<p>将指定的节点插入到参考节点的后面</p>
		<p>Usage Example:</p>
		<p>dojo.dom.insertAfter(node, ref, false); //如果满足要求的话就直接退出<br />dojo.dom.insertAfter(node, ref, true);</p>
		<p>
				<br />dojo.dom.insertAtPosition</p>
		<p>将指定的节点插入到参考节点的指定位置</p>
		<p>Usage Example:</p>
		<p>dojo.dom.insertAtPosition(node, ref, "before");//参考节点之前<br />dojo.dom.insertAtPosition(node, ref, "after"); //参考节点之后<br />dojo.dom.insertAtPosition(node, ref, "first"); //参考节点的第一个子节点<br />dojo.dom.insertAtPosition(node, ref, "last");  //参考节点的最后一个子节点<br />dojo.dom.insertAtPosition(node, ref); //默认位置为"last"</p>
		<p>
				<br />dojo.dom.insertAtIndex</p>
		<p>将指定的节点插入到参考节点的子节点中的指定索引的位置</p>
		<p>Usage Example:</p>
		<p>dojo.dom.insertAtIndex(node, containingNode, 3);  //把node插入到containingNode的子节点中，使其成为第3个子节点</p>
		<p>
				<br />dojo.dom.textContent</p>
		<p>设置或获取指定节点的文本</p>
		<p>Usage Example:</p>
		<p>dojo.dom.textContent(node, 'text'); //设置node的文本为'text'<br />dojo.dom.textContent(node); //返回node的文本</p>
		<p>
				<br />dojo.dom.hasParent</p>
		<p>判断指定节点是否有父节点</p>
		<p>Usage Example:</p>
		<p>dojo.dom.hasParent(node);</p>
		<p>
				<br />dojo.dom.isTag</p>
		<p>判断节点是否具有指定的tag</p>
		<p>Usage Example:</p>
		<p>var el = document.createElement("SPAN");<br />dojo.dom.isTag(el, "SPAN"); //will return "SPAN"<br />dojo.dom.isTag(el, "span"); //will return ""<br />dojo.dom.isTag(el, "INPUT", "SPAN", "IMG"); //will return "SPAN"<br /></p><img src ="http://www.blogjava.net/rain1102/aggbug/94391.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2007-01-17 11:36 <a href="http://www.blogjava.net/rain1102/articles/94391.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>dojo.io.IO &amp; dojo.io.BrowserIO</title><link>http://www.blogjava.net/rain1102/articles/94388.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Wed, 17 Jan 2007 03:28:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/94388.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/94388.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/94388.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/94388.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/94388.html</trackback:ping><description><![CDATA[<p>模块：dojo.io.IO<br /><br />dojo.io.bind</p>
		<p>
				<br />处理请求取回需要的数据并处理</p>
		<p> </p>
		<p>这个函数是AJAX中最为重要和有用的函数，dojo.io.bind这个类是用来处理客户端与服务器间通讯的，需要通讯的参数由对象dojo.io.Request所定义，具体通讯的方法则由另外一个对象Transport所提供。</p>
		<p> </p>
		<p>因此，我们如果需要与服务器通讯，则应该定义一个Request对象，其中包括服务器地址及回调函数，例子中Requset都是以匿名对象方式定义的</p>
		<p>
				<br />虽然我们可以定义一个自己的Transport，但是显然不如直接利用现成的Transport方便。</p>
		<p>
				<br />Dojo里提供了一个同时兼容IE和Firefox的dojo.io.XMLHTTPTransport，但是这个对象位于dojo.io.BrowserIO，因此，一般require dojo.io.IO时，还应该require dojo.io.BrowserIO</p>
		<p> </p>
		<p>Usage Example:</p>
		<p>  dojo.io.bind({<br />    url: "<a href="http://localhost/test.html"><font color="#003366">http://localhost/test.html</font></a>", //要请求的页面地址<br />    mimetype: "text/html", //请求的页面的类型，应该设置为与你请求页面类型对应的mimetype，默认为 "text/plain"<br />    method："GET", //默认为"GET"<br />    sync: false, //默认为异步执行<br />    useCache: false, //默认为不使用页面缓存，注意这里的缓存并不是浏览器的缓存，而是Dojo自身所维护的页面缓存<br />    preventCache: false, //默认为启用浏览器缓存，否则将通过自动增加不同的参数来确保浏览器缓存失效<br />    timeoutSeconds: 3000,  //3秒后超时，如果为0则永不超时</p>
		<p>    load: function(type, data, evt) { alert(data); }, //type should be "load", data is that we wanted<br />    error: function(type, error) { alert(error.message); }, //error is dojo.io.Error<br />    timeout: function(type) { alert("请求超时！"); }<br />  });</p>
		<p>
				<br />  你也可以用一个handle来处理所有的事件</p>
		<p> </p>
		<p>  dojo.io.bind({<br />    url: "<a href="http://localhost/test.html"><font color="#003366">http://localhost/test.html</font></a>", //要请求的页面地址<br />    mimetype: "text/html", //请求的页面的类型，应该设置为与你请求页面类型对应的mimetype<br />    timeoutSeconds: 3000,  //3秒后超时，如果为0则永不超时<br />    handle: function(type, data, evt){<br />      if(type == "load") { alert(data); } //data is that we wanted<br />      else if (type == "error") { alert(data.message); } //data is the error object<br />      else { ; } //other events maybe need handled<br />    }<br />  });<br />  <br />  如果没有在Request中指定所用的transport，则Dojo会自动的在已注册的transports中寻找能够处理这个Request的transport，如果不能找到，则返回指定的Request。下面是一个指定了transport的例子:</p>
		<p>
				<br />  dojo.io.bind({<br />    url: "<a href="http://localhost/test.html"><font color="#003366">http://localhost/test.html</font></a>", //要请求的页面地址<br />    mimetype: "text/html", //请求的页面的类型，应该设置为与你请求页面类型对应的mimetype<br />    timeoutSeconds: 3000,  //3秒后超时，如果为0则永不超时<br />    transport: "XMLHTTPTransport",</p>
		<p>    load: function(type, data, evt) { alert(data); }, //type should be "load", data is that we wanted<br />    error: function(type, error) { alert(error.message); }, //error is dojo.io.Error<br />    timeout: function(type) { alert("请求超时！"); }<br />  });</p>
		<p>
				<br />  你还可以利用bind来得到一个JavaScript所定义的对象（注意mimetype必须要定义为"text/javascript"）</p>
		<p> </p>
		<p>  testObj = dojo.io.bind({<br />    url: "<a href="http://localhost/test.js"><font color="#003366">http://localhost/test.js</font></a>", //test.js里定义了一个对象<br />    mimetype: "text/javascript", //请求的页面的类型，应该设置为与你请求页面类型对应的mimetype<br />    timeoutSeconds: 3000,  //3秒后超时，如果为0则永不超时<br />    handle: function(type, data, evt){<br />      if(type == "load") { alert(data); } //data is a object or value<br />      else if (type == "error") { alert(data.message); } //data is the error object<br />      else { ; } //other events maybe need handled<br />    }<br />  });<br />  <br />  下面是一个Post的例子:<br />  <br />  dojo.io.bind({<br />    url: "<a href="http://localhost/test.aspx"><font color="#003366">http://localhost/test.aspx</font></a>", //要提交的页面地址<br />    mimetype: "text/html", //请求的页面的类型，应该设置为与你请求页面类型对应的mimetype<br />    timeoutSeconds: 3000,  //3秒后超时，如果为0则永不超时<br />    method: "POST",<br />    formNode: dojo.byId("myForm"), //指定提交的Form名称</p>
		<p>    load: function(type, data, evt) { alert(data); }, //type should be "load", data is that we wanted<br />    error: function(type, error) { alert(error.message); }, //error is dojo.io.Error<br />    timeout: function(type) { alert("请求超时！"); }<br />  });</p>
		<p> </p>
		<p>  另一个Post的例子(without Form to post):</p>
		<p>
				<br />  dojo.io.bind({<br />    url: "<a href="http://localhost/test.aspx"><font color="#003366">http://localhost/test.aspx</font></a>", //要提交的页面地址<br />    mimetype: "text/html", //请求的页面的类型，应该设置为与你请求页面类型对应的mimetype<br />    timeoutSeconds: 3000,  //3秒后超时，如果为0则永不超时<br />    method: "POST",<br />    content: {a: 1, b: 2}, //要提交的数据</p>
		<p>    load: function(type, data, evt) { alert(data); }, //type should be "load", data is that we wanted<br />    error: function(type, error) { alert(error.message); }, //error is dojo.io.Error<br />    timeout: function(type) { alert("请求超时！"); }<br />  });</p>
		<p>
				<br /> </p>
		<p>dojo.io.queueBind</p>
		<p>
				<br />  有时，我们需要一次发出多个网页请求，则应该使用dojo.io.queueBind，因为浏览器可能只允许同时发出有限个数的请求，如果是使用dojo.io.bind的话，则有可能会申请不到新的XMLHttp对象而导致出错。<br /><br />  用法与dojo.io.bind是一样的。</p>
		<p>
				<br /> </p>
		<p>dojo.io.argsFromMap</p>
		<p>
				<br />  用来把对象转换为URL的参数形式<br />  <br />Usage Example:</p>
		<p>
				<br />  dojo.io.argsFromMap({a:1,b:2,c:3}); //will return "c=3&amp;b=2&amp;a=1"<br />  dojo.io.argsFromMap({name:"名称",value:"值"},"utf"); //will return "value=%E5%80%BC&amp;name=%E5%90%8D%E7%A7%B0", 有中文的话应该指定utf格式，否则dojo.string.encodeAscii返回的编码是很怪异的<br />  dojo.io.argsFromMap({a:1,b:2,c:3}, "utf", "c"); //will return "b=2&amp;a=1&amp;c=3"，最后一个参数可以控制指定名称的值出现在最后<br />  </p>
		<p> </p>
		<p>dojo.io.setIFrameSrc</p>
		<p>
				<br />  设置IFrame的Src<br />  <br />Usage Example:</p>
		<p> </p>
		<p>  dojo.io.setIFrameSrc(dojo.byId("myFrame"), "<a href="http://localhost/test.htm"><font color="#003366">http://localhost/test.htm</font></a>"); //myFrame打开指定的网页<br />  dojo.io.setIFrameSrc(dojo.byId("myFrame"), "<a href="http://localhost/test.htm"><font color="#003366">http://localhost/test.htm</font></a>", true); //myFrame打开指定的网页，并覆盖浏览器的历史记录</p>
		<p>
				<br /> </p>
		<p>TODO: 补充一个kwArgs的例子，我之前在网上看见过，可是现在无论如何也找不到相关的页面了，只好以后在举例了</p>
		<p> </p>
		<p>
				<br />模块：dojo.io.BrowserIO</p>
		<p> </p>
		<p>基本上就提供了dojo.io.XMLHTTPTransport这个对象</p>
		<p>
				<br />XMLHTTPTransport一般能够满足我们的需求，但是其有几个限制：它不能传输文件，不能够成功执行跨域名的远程请求，并且不支持 file:// 这样的协议</p>
		<p>
				<br />因此，根据应用要求，我们可能会需要选用其它的transport: dojo.io.IframeTransport, dojo.io.repubsubTranport, dojo.io.ScriptSrcTransport, ShortBusTransport</p>
		<p> </p>
		<p>dojo.io.IframeTransport，用法与xmlhttp是一样的，其优点就是可以跨域，不存在任何的安全问题<br />如果Request指定的mimetype是text或javascript，返回的内容应该是放在第一个textarea里的内容，如果指定的mimetype是html，则IFrame里的html则是需要的内容。因为浏览器兼容的原因，IframeTransport不能正确处理返回类型为XML的请求。 </p>
		<p> </p>
		<p>关于Rpc，这个类似于Remoting的东西，也将在以后对其进行介绍。<br /></p><img src ="http://www.blogjava.net/rain1102/aggbug/94388.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2007-01-17 11:28 <a href="http://www.blogjava.net/rain1102/articles/94388.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>dojo.lang.array &amp; dojo.lang.func &amp; dojo.string.extras</title><link>http://www.blogjava.net/rain1102/articles/94383.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Wed, 17 Jan 2007 03:18:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/94383.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/94383.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/94383.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/94383.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/94383.html</trackback:ping><description><![CDATA[模块：dojo.lang.array<br /><br />dojo.lang.has<br />判断对象是否具有指定属性，不过这个方法有用吗，不如直接使用 if(name in obj)<br />Usage Example:<br />  dojo.lang.has(dojo.lang, "has"); //will return true<br /><br />dojo.lang.isEmpty<br />判断对象或数组是否为空<br />Usage Example:<br />  dojo.lang.isEmpty({a: 1}); //will return false<br />  dojo.lang.isEmpty([]); //will return true<br /><br />dojo.lang.map<br />调用指定的方法处理指定的数组或字符串<br />Usage Example:<br />  dojo.lang.map([1,2,3,4,5], function(x) { return x * x;}); //will return [1,4,9,16,25]<br /><br />dojo.lang.forEach<br />遍历指定的数组或字符串，并对其中的元素调用指定的方法<br />Usage Example:<br />  dojo.lang.forEach("abc", function(x) { alert(x); });<br /><br />dojo.lang.every<br />检查指定的数组是否全部满足指定方法的条件<br />Usage Example:<br />  dojo.lang.every([1,-2,3], function(x) { return x &gt; 0; }); //指定的数组不是全大于0的，因此返回false<br /><br />dojo.lang.some<br />检查指定的数组是否部分满足指定方法的条件<br />Usage Example:<br />  dojo.lang.some([1,-2,3], function(x) { return x &gt; 0; }); //指定的数组有大于0的元素，因此返回true<br /><br />dojo.lang.filter<br />根据指定的方法来过滤指定的数组<br />Usage Example:<br />  dojo.lang.filter([1,-2,3], function(x) { return x &gt; 0; }); //will return [1, 3]<br /><br />dojo.lang.unnest<br />把指定的参数或数组转换为一维数组<br />Usage Example:<br />  dojo.lang.unnest(1, 2, 3);  //will return [1, 2, 3]<br />  dojo.lang.unnest(1, [2, [3], [{4}]]); //will return [1, 2, 3, 4]<br /><br />dojo.lang.toArray<br />将输入转换为数组<br />Usage Example:<br />  function test()<br />  {<br />    return dojo.lang.toArray(arguments, 1);<br />  }<br />  test(1,2,3,4,5); //will return [2,3,4,5]<br /><br />模块：dojo.lang.func<br />dojo.lang.hitch<br />将指定的方法挂在指定的对象下并返回该方法<br />Usage Example:<br />  func = {test: function(s) {alert(s)}};<br />  dojo.lang.mixin(func, {demo: dojo.lang.hitch(func, "test")});<br />  func.demo("demo and test are same method");<br /><br />dojo.lang.forward<br />返回自身对象的指定名称的方法引用<br />Usage Example:<br />  func = {test: function(s) {alert(s)}, demo: dojo.lang.forward("test")};<br />  func.demo("demo and test are same method");<br /><br />dojo.lang.curry<br />What is curry? 请参阅这篇文章：<a href="http://www.svendtofte.com/code/curried_javascript/" target="_blank"><font color="#003366">http://www.svendtofte.com/code/curried_javascript/</font></a><br />Usage Example:<br />  function add(a, b)<br />  {<br />    return a + b;<br />  }<br />  dojo.lang.curry(null, add, 2, 3); //will return 5<br />  dojo.lang.curry(null, add, 2)(3); //will return 5<br />  dojo.lang.curry(null, add)(2)(3); //will return 5<br />  dojo.lang.curry(null, add)()(2)(3); //will return 5<br /><br />dojo.lang.curryArguments<br />与dojo.lang.curry类似，但是可以选择忽略掉前n个参数<br />Usage Example:<br />  function add(a, b)<br />  {<br />    return a + b;<br />  }<br />  dojo.lang.curryArguments(null, add, [1,2,3,4,5], 2); //will return 5 (= 2 + 3)<br />  <br />dojo.lang.tryThese<br />测试参数指定所有函数，并返回第一个返回值不为0的函数值<br />from seno: <br />dojo.lang.tryThese方法和prototype中的Try.these()方法是一样的， <br />xmlNode.text在一些浏览器中好用，但是xmlNode.textContent在另一些浏览器中正常工作。 使用Try.these()方法我们可以得到正常工作的那个方法的返回值。 <br />&lt;script&gt; <br />function getXmlNodeValue(xmlNode){ <br />return Try.these( <br />function() {return xmlNode.text;}, <br />function() {return xmlNode.textContent;) <br />); <br />} <br /><br />dojo.lang.delayThese<br />dojo.lang.delayThese的用法是： <br />function(/*Array*/farr, /*Function, optional*/cb, /*Integer*/delay, /*Function, optional*/onend) <br />根据delay指定的延迟，依次调用farr里面的方法，如果指定了cb，则调用完方法后调用cb。当farr中所有的方法都调用了之后，调用onend。<br /><br />模块：dojo.string.extras<br /><br />dojo.string.substituteParams<br />类似C#中的String.Format函数<br />%{name}要保证与传入的对象的名称大小写一致，否则会出异常<br />Usage Example:<br />  dojo.string.substituteParams("%{0} - %{1} - %{2}", "a", "b", "c"); //will return "a - b - c"<br />  dojo.string.substituteParams("%{name}: %{value}", {name:"名称",value:"值"}); //will return "名称: 值"<br /><br />dojo.string.capitalize<br />把每一个单词的首字母大写<br />Usage Example:<br />  dojo.string.capitalize("show me love"); //will return "Show Me Love"<br /><br />dojo.string.isBlank<br />判断输入字符串是否为空或全是空白字符，如果传入对象为非字符串则也会返回true<br />Usage Example:<br />  dojo.string.isBlank("   1   "); //will return false<br /><br />dojo.string.escape<br />参数1为type，可传值为: xml/html/xhtml, sql, regexp/regex, javascript/jscript/js, ascii<br />将按照所传type对字符串进行编码<br />Usage Example:<br />  dojo.string.escape("html", "&lt;input type='text' value='' /&gt;"); //will return "&amp;lt;input <br />type='text' value='' /&amp;gt;"<br /><br />dojo.string.encodeAscii<br />dojo.string.escapeXml<br />dojo.string.escapeSql<br />dojo.string.escapeRegExp<br />dojo.string.escapeJavaScript<br />dojo.string.escapeString<br />这些函数也就是 dojo.string.escape 所调用的，这里无需多说<br /><br />dojo.string.summary<br />取得输入字符串的缩略版本<br />Usage Example:<br />  dojo.string.summary("1234567890", 5); //will return "12345..."<br /><br />dojo.string.endsWith<br />判断输入字符串是否以指定的字符串结尾<br />Usage Example:<br />  dojo.string.endsWith("abcde", "E");  //will return false<br />  dojo.string.endsWith("abcde", "E", true); //will return true<br /><br />dojo.string.endsWithAny<br />判断输入字符串是否以指定的任意字符串结尾<br />Usage Example:<br />  dojo.string.endsWithAny("abcde", "E", "e"); //will return true<br /><br />dojo.string.startsWith<br />判断输入字符串是否以指定的字符串开头<br />Usage Example:<br />  dojo.string.startsWith("abcde", "A");  //will return false<br />  dojo.string.startsWith("abcde", "A", true); //will return true<br /><br />dojo.string.startsWithAny<br />判断输入字符串是否以指定的任意字符串开头<br />Usage Example:<br />  dojo.string.startsWithAny("abcde", "A", "a"); //will return true<br /><br />dojo.string.has<br />判断输入字符串是否含有任意指定的字符串<br />Usage Example:<br />  dojo.string.has("abcde", "1", "23", "abc"); //will return true<br /><br />dojo.string.normalizeNewlines<br />按要求转换回车换行的格式<br />Usage Example:<br />  dojo.string.normalizeNewlines("a\r\nb\r\n", "\r"); //will return "a\rb\r"<br /><br />dojo.string.splitEscaped<br />将字符串按分隔符转换为数组<br />Usage Example:<br />  dojo.string.splitEscaped("a\\_b_c", '_'); //will return ["a\\_b", "c"]<img src ="http://www.blogjava.net/rain1102/aggbug/94383.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2007-01-17 11:18 <a href="http://www.blogjava.net/rain1102/articles/94383.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>dojo.string &amp; dojo.lang</title><link>http://www.blogjava.net/rain1102/articles/94380.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Wed, 17 Jan 2007 03:02:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/94380.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/94380.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/94380.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/94380.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/94380.html</trackback:ping><description><![CDATA[<pre>
				<strong>模块：dojo.string.common / dojo.string</strong>
dojo.string.common 和 dojo.string 是一样的，只要require其中一个就可以使用以下方法
<strong>dojo.string.trim</strong>
去掉字符串的空白
Usage Example:
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">s </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> abc </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />dojo.string.trim(s);      </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">will return "abc"</span><span style="COLOR: #008000"><br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">dojo.string.trim(s, </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">);      </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">will return "abc"</span><span style="COLOR: #008000"><br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">dojo.string.trim(s, </span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">);      </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">will return "abc "</span><span style="COLOR: #008000"><br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">dojo.string.trim(s, </span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">);</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">will return " abc"</span></div></pre>
		<pre>
				<strong>dojo.string.trimStart</strong>
去掉字符串开头的空白
Usage Example:
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">s </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> abc </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />dojo.string.trimStart(s);      </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">will return "abc "</span></div><strong>dojo.string.trimEnd</strong>
去掉字符串结尾的空白
Usage Example:
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">s </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> abc </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />dojo.string.trimEnd(s);            </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">will return " abc"</span></div><strong>dojo.string.repeat</strong>
生成由同一字符(串)重复组成的字符串
Usage Example:
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">dojo.string.repeat(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">a</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">); </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">will return "aaaa"</span><span style="COLOR: #008000"><br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">dojo.string.repeat(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">1234</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">); </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">will return "1234-1234-1234"</span></div><strong>dojo.string.pad</strong>
使用字符补齐字符串
Usage Example:
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">dojo.string.pad(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">100</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">6</span><span style="COLOR: #000000">);            </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">will return "000100"</span><span style="COLOR: #008000"><br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">dojo.string.pad(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">100</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">6</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">);      </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">will return "000100"</span><span style="COLOR: #008000"><br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">dojo.string.pad(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">100</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">6</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">);      </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">will return "100000"</span></div><strong>dojo.string.padLeft</strong>
使用字符补齐字符串开头
Usage Example:
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">dojo.string.padLeft(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">100</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">6</span><span style="COLOR: #000000">);            </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">will return "000100"</span></div><strong>dojo.string.padRight</strong>
使用字符补齐字符串结尾
Usage Example:
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">dojo.string.padRight(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">100</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">6</span><span style="COLOR: #000000">);            </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">will return "100000"</span></div><br /><br /><br /></pre>
		<pre>
				<strong>模块：dojo.lang.common / dojo.lang</strong>
dojo.lang.common 和 dojo.lang 是一样的，只要require其中一个就可以使用以下方法</pre>
		<pre>
				<strong>dojo.lang.mixin</strong>
将一个对象的方法和属性增加到另一个对象上
Usage Example:
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img id="Codehighlighter1_9_70_Open_Image" onclick="this.style.display='none'; Codehighlighter1_9_70_Open_Text.style.display='none'; Codehighlighter1_9_70_Closed_Image.style.display='inline'; Codehighlighter1_9_70_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> s1 </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span id="Codehighlighter1_9_70_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"></span><span><span style="COLOR: #000000">{name: </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">TestObj</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, test1: </span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">()</span><span id="Codehighlighter1_44_69_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"></span><span id="Codehighlighter1_44_69_Open_Text"><span style="COLOR: #000000">{alert(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">this is test1!</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);}</span></span><span style="COLOR: #000000">}</span><br /><img id="Codehighlighter1_81_138_Open_Image" onclick="this.style.display='none'; Codehighlighter1_81_138_Open_Text.style.display='none'; Codehighlighter1_81_138_Closed_Image.style.display='inline'; Codehighlighter1_81_138_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /></span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> s2 </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span id="Codehighlighter1_81_138_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"></span><span id="Codehighlighter1_81_138_Open_Text"><span style="COLOR: #000000">{value: </span><span style="COLOR: #000000">1000</span><span style="COLOR: #000000">, test2: </span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">()</span><span id="Codehighlighter1_112_137_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"></span><span id="Codehighlighter1_112_137_Open_Text"><span style="COLOR: #000000">{alert(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">this is test2!</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);}</span></span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000"><br /><img id="Codehighlighter1_148_149_Open_Image" onclick="this.style.display='none'; Codehighlighter1_148_149_Open_Text.style.display='none'; Codehighlighter1_148_149_Closed_Image.style.display='inline'; Codehighlighter1_148_149_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /></span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> d </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span id="Codehighlighter1_148_149_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"></span><span id="Codehighlighter1_148_149_Open_Text"><span style="COLOR: #000000">{}</span></span><span style="COLOR: #000000">;<br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />dojo.lang.mixin(d, s1, s2); </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">执行后d就具备了s1和s2的所有属性和方法</span><span style="COLOR: #008000"><br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">d.test1();</span></div><strong>dojo.lang.extend</strong>
为指定类的原型扩展方法与属性
Usage Example:
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><strong><img id="Codehighlighter1_23_24_Open_Image" onclick="this.style.display='none'; Codehighlighter1_23_24_Open_Text.style.display='none'; Codehighlighter1_23_24_Closed_Image.style.display='inline'; Codehighlighter1_23_24_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /></strong><span style="COLOR: #000000">TestClass </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">() </span><span id="Codehighlighter1_23_24_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"></span><span id="Codehighlighter1_23_24_Open_Text"><span style="COLOR: #000000">{}</span></span><span style="COLOR: #000000">;<br /><img id="Codehighlighter1_55_103_Open_Image" onclick="this.style.display='none'; Codehighlighter1_55_103_Open_Text.style.display='none'; Codehighlighter1_55_103_Closed_Image.style.display='inline'; Codehighlighter1_55_103_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" />dojo.lang.extend(TestClass, </span><span id="Codehighlighter1_55_103_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"></span><span id="Codehighlighter1_55_103_Open_Text"><span style="COLOR: #000000">{name: </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">demo</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, test: </span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">()</span><span id="Codehighlighter1_86_102_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"></span><span id="Codehighlighter1_86_102_Open_Text"><span style="COLOR: #000000">{alert(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Test!</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);}</span></span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000">);<br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> o </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> TestClass();  </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">TestClass本来是没有test方法的，但是extend以后就有test方法了</span><span style="COLOR: #008000"><br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">o.test();</span></div><strong>dojo.lang.find=dojo.lang.indexOf</strong>
查找指定对象在指定数组中的位置
Usage Example:
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> arr </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> [</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">];<br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />dojo.lang.find(arr, </span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">);                  </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">will return 1</span><span style="COLOR: #008000"><br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">dojo.lang.find(arr, </span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">, </span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">);            </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">will return 1</span><span style="COLOR: #008000"><br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">dojo.lang.find(arr, </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, </span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">);            </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">will return -1</span><span style="COLOR: #008000"><br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">dojo.lang.find(arr, </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, </span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">);      </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">will return 1</span><span style="COLOR: #008000"><br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">dojo.lang.find(arr, </span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">, </span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">, </span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">);      </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">will return 4</span></div><strong>dojo.lang.findLast=dojo.lang.lastIndexOf
</strong>查找指定对象在指定数组中的位置，从后往前查
Usage Example:
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> arr </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> [</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">];<br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />dojo.lang.findLast(arr, </span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">);                  </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">will return 4</span><span style="COLOR: #008000"><br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">dojo.lang.findLast(arr, </span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">, </span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">);            </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">will return 4</span><span style="COLOR: #008000"><br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">dojo.lang.findLast(arr, </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, </span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">);            </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">will return -1</span><span style="COLOR: #008000"><br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">dojo.lang.findLast(arr, </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, </span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">);            </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">will return 4</span></div><strong>dojo.lang.inArray</strong>
查找指定对象是否在指定数组中
Usage Example:
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> arr </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> [</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">];<br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />dojo.lang.inArray(arr, </span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">);      </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">will return true</span><span style="COLOR: #008000"><br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">dojo.lang.inArray(arr, </span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">);      </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">will return false</span></div><strong>dojo.lang.isObject</strong>
判断输入的类型是否为对象
Usage Example:
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">dojo.lang.isObject(</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> String());      </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">will return true</span><span style="COLOR: #008000"><br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">dojo.lang.isObject(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">123</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">));      </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">will return false</span></div><strong>dojo.lang.isArray</strong>
判断输入的类型是否为数组
Usage Example:
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img id="Codehighlighter1_18_26_Open_Image" onclick="this.style.display='none'; Codehighlighter1_18_26_Open_Text.style.display='none'; Codehighlighter1_18_26_Closed_Image.style.display='inline'; Codehighlighter1_18_26_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><span style="COLOR: #000000">dojo.lang.isArray(</span><span id="Codehighlighter1_18_26_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"></span><span id="Codehighlighter1_18_26_Open_Text"><span style="COLOR: #000000">{a:</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,b:</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000">);      </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">will return false</span><span style="COLOR: #008000"><br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">dojo.lang.isArray([</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">]);      </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">will return true</span></div><strong>dojo.lang.isFunction</strong>
判断输入的类型是否为函数
Usage Example:
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img id="Codehighlighter1_32_33_Open_Image" onclick="this.style.display='none'; Codehighlighter1_32_33_Open_Text.style.display='none'; Codehighlighter1_32_33_Closed_Image.style.display='inline'; Codehighlighter1_32_33_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><span style="COLOR: #000000">dojo.lang.isFunction(</span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">() </span><span id="Codehighlighter1_32_33_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"></span><span id="Codehighlighter1_32_33_Open_Text"><span style="COLOR: #000000">{}</span></span><span style="COLOR: #000000">);      </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">will return true</span></div><strong>dojo.lang.isString</strong>
判断输入的类型是否为字符串
Usage Example:
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">dojo.lang.isString(</span><span style="COLOR: #000000">""</span><span style="COLOR: #000000">);      </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">will return true</span><span style="COLOR: #008000"><br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">dojo.lang.isString(</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">);      </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">will return false</span></div><strong>dojo.lang.isAlien</strong>
判断输入的类型是否为系统函数
Usage Example:
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">dojo.lang.isAlien(isNaN);      </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">will return true</span></div><strong>dojo.lang.isBoolean</strong>
判断输入的类型是否为布尔类型
Usage Example:
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">dojo.lang.isBoolean(</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">);      </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">will return true</span></div><strong><br />dojo.lang.isNumber</strong>
判断输入的类型是否为数值，根据注释所说，此函数使用不太可靠，但是可替换使用的系统函数isNaN也不太可靠<br /><strong><br />dojo.lang.isUndefined</strong>
判断输入是否为未定义，根据注释所说，此函数有可能会导致抛出异常，推荐使用 typeof foo == "undefined" 来判断</pre>
		<pre>
				<strong>
						<br />模块：dojo.lang.extras</strong>
				<strong>dojo.lang.setTimeout</strong>
延迟指定时间后执行指定方法
Usage Example:
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000"> onTime(msg)<br /><img id="Codehighlighter1_21_39_Open_Image" onclick="this.style.display='none'; Codehighlighter1_21_39_Open_Text.style.display='none'; Codehighlighter1_21_39_Closed_Image.style.display='inline'; Codehighlighter1_21_39_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /></span><span id="Codehighlighter1_21_39_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"></span><span id="Codehighlighter1_21_39_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />dojo.debug(msg)<br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="COLOR: #000000"><br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />dojo.lang.setTimeout(onTime, </span><span style="COLOR: #000000">1000</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">test</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">); </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">1秒后会输出调试信息"test"</span><span style="COLOR: #008000"><br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">dojo.lang.setTimeout(dojo, </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">debug</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">1000</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">test</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">); </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">1秒后会输出调试信息"test"</span><span style="COLOR: #008000"><br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span></div><strong>dojo.lang.getNameInObj</strong>
获得指定项目在指定对象中的名称
Usage Example:
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">dojo.lang.getNameInObj(dojo, dojo.debug);      </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">will return "debug"</span></div><strong>dojo.lang.shallowCopy</strong>
返回指定对象的浅表复制副本
Usage Example:
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img id="Codehighlighter1_22_23_Open_Image" onclick="this.style.display='none'; Codehighlighter1_22_23_Open_Text.style.display='none'; Codehighlighter1_22_23_Closed_Image.style.display='inline'; Codehighlighter1_22_23_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><span style="COLOR: #000000">dojo.lang.shallowCopy(</span><span id="Codehighlighter1_22_23_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"></span><span id="Codehighlighter1_22_23_Open_Text"><span style="COLOR: #000000">{}</span></span><span style="COLOR: #000000">);    </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">will return a 空对象</span></div><strong>dojo.lang.firstValued</strong>
返回第一个存在定义的参数
Usage Example:
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> a;<br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />dojo.lang.firstValued(a,</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">);      </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">will return 2</span></div></pre><img src ="http://www.blogjava.net/rain1102/aggbug/94380.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2007-01-17 11:02 <a href="http://www.blogjava.net/rain1102/articles/94380.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Dojo之djConfig解说</title><link>http://www.blogjava.net/rain1102/articles/94367.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Wed, 17 Jan 2007 02:21:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/94367.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/94367.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/94367.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/94367.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/94367.html</trackback:ping><description><![CDATA[djConfig是dojo内置的一个全局设置对象，其作用是可以通过其控制dojo的行为<br /><br />首先我们需要在引用dojo.js前声明djConfig对象，以便在加载dojo.js的时候才能够取得所设置的值，虽然在0.3版本以后dojo支持在加载后设置，但是强烈建议你把声明djConfig的代码作为第一段script<br /><br />一个完整的djConfig对象定义如下（值均为dojo的默认值）
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee" twffan="done"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" twffan="done" /><span style="COLOR: #000000" twffan="done">&lt;</span><span style="COLOR: #000000" twffan="done">script type</span><span style="COLOR: #000000" twffan="done">=</span><span style="COLOR: #000000" twffan="done">"</span><span style="COLOR: #000000" twffan="done">text/javascript</span><span style="COLOR: #000000" twffan="done">"</span><span style="COLOR: #000000" twffan="done">&gt;</span><span style="COLOR: #000000" twffan="done"><br /><img id="Codehighlighter1_47_297_Open_Image" onclick="this.style.display='none'; Codehighlighter1_47_297_Open_Text.style.display='none'; Codehighlighter1_47_297_Closed_Image.style.display='inline'; Codehighlighter1_47_297_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" twffan="done" /></span><span style="COLOR: #0000ff" twffan="done">var</span><span style="COLOR: #000000" twffan="done"> djConfig </span><span style="COLOR: #000000" twffan="done">=</span><span style="COLOR: #000000" twffan="done"> </span><span id="Codehighlighter1_47_297_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff" twffan="done"></span><span id="Codehighlighter1_47_297_Open_Text" twffan="done"><span style="COLOR: #000000" twffan="done">{<br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" twffan="done" />    isDebug: </span><span style="COLOR: #0000ff" twffan="done">false</span><span style="COLOR: #000000" twffan="done">,<br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" twffan="done" />    debugContainerId: </span><span style="COLOR: #000000" twffan="done">""</span><span style="COLOR: #000000" twffan="done">,<br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" twffan="done" />    bindEncoding: "",<br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" twffan="done" />    allowQueryConfig: </span><span style="COLOR: #0000ff" twffan="done">false</span><span style="COLOR: #000000" twffan="done">,<br /><img src="http://www.cnblogs.com/Ima