﻿<?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-丄諦啲仇魜ヤ              -文章分类-EXT2.0</title><link>http://www.blogjava.net/Crying/category/31347.html</link><description>如 果 敌 人 让 你 生 气 , 那 说 明 你 没 有 胜 他 的 把 握！ 
</description><language>zh-cn</language><lastBuildDate>Wed, 28 May 2008 11:55:16 GMT</lastBuildDate><pubDate>Wed, 28 May 2008 11:55:16 GMT</pubDate><ttl>60</ttl><item><title>ext 2.0 对话框</title><link>http://www.blogjava.net/Crying/articles/201200.html</link><dc:creator>Crying</dc:creator><author>Crying</author><pubDate>Sun, 18 May 2008 02:31:00 GMT</pubDate><guid>http://www.blogjava.net/Crying/articles/201200.html</guid><wfw:comment>http://www.blogjava.net/Crying/comments/201200.html</wfw:comment><comments>http://www.blogjava.net/Crying/articles/201200.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Crying/comments/commentRss/201200.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Crying/services/trackbacks/201200.html</trackback:ping><description><![CDATA[<p>
Ext的对话框都封装在Ext.MessageBox类，该类还有一个简写形式即Ext.Msg，可以直接通过Ext.MessageBox或Ext.Msg来直接调用相应的对话框方法来显示Ext对话框。看下面的代码：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: red;"> Alert<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 标准的&#8220;确认&#8221;对话框。</span></p>
Ext.onReady(function(){	<br />
Ext.get("btnAlert").on("click",function(){<br />
Ext.MessageBox.alert("请注意","这是ExtJS的提示框");<br />
});<br />
<br />
});
<p>　　Html页面中的内容：</p>
<br />
&lt;input id="btnAlert" type="button" value="alert框" /&gt;
<p>　　执行程序，点击上面的&#8220;alert框&#8221;按钮，将会在页面上显示如下图所示的对话框。</p>
<br />
<p align="center"><img alt="" src="http://www.easyjf.com/blog/lengyu/extjs/image051.jpg" /></p>
<br />
<p align="center"><br />
</p>
<p align="center"><br />
</p>
<pre>Ext.MessageBox.alert("请注意","这是ExtJS的提示框",showResult);//调用回调函数显示你点击了是什么按钮<br />
<br />
function showResult(btn){<br />
Ext.example.msg('按钮被点击', '您点击了 &#8220;{0}&#8221; 按钮。', btn);<br />
};<br />
<br />
在浏览器上方会出现如下的消息<br />
<br />
</pre>
<img src="http://www.blogjava.net/images/blogjava_net/crying/sss.jpg" alt="" border="0" /><br />
<p align="center"><br />
</p>
<p align="center"><strong><span style="color: red;"><strong>Confirm</strong><br />
标准的&#8220;是 / 否&#8221;对话框。</span></strong></p>
<pre style="border: 1px dotted #999999; padding: 5px; font-size: 12px; margin-left: 10px; margin-right: 10px; background-color: #eeeeee;"><span class="content1">我们可以根据需要显示自下定义的对话框。普通对话框一般包括四个参数，<br />
比如confirm的方法签名为<br />
confirm (&nbsp;String title, String msg,[Function fn], [Object scope]&nbsp;)<br />
，参数title表示对话框的标题，参数msg表示对话框中的提示信息，这两个参数是必须的；可选的参数fn表示当关闭对话框后执行的回调函数，参数<br />
scope表示回调函数的执行作用域。回调函数可以包含两个参数，即button与text,button表示点击的按钮，text表示对话框中有活动输<br />
入选项时输入的文本内容。我们可以在回调函数中通过button参数来判断用户作了什么什么选择，可以通过text来读取在对话框中输入的内容。</span><br />
<span class="content1"><br />
<br />
<br />
这样当用户点击对话框中的yes按钮时，就会执行相应的操作，而选择no则忽略操作。<br />
<br />
</span>Ext.onReady(function(){	<br />
Ext.get("btnAlert").on("click",function(){<br />
Ext.MessageBox.confirm("请确认","是否真的要删除指定的内容",function(button,text){<br />
if(button=="yes"){<br />
//执行删除操作<br />
alert("成功删除");<br />
}<br />
});<br />
});		<br />
});<br />
<br />
<br />
<span class="content1">
<p align="center"><img alt="" src="http://www.easyjf.com/blog/lengyu/extjs/image053.jpg" /></p>
<br />
<br />
<br />
<br />
<br />
<br />
</span></pre>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: red;">&nbsp; <strong>prompt</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 标准的&#8220;提示输入&#8221;对话框。</span></p>
<p>看看prompt框，我们看下面的代码：</p>
Ext.onReady(function(){	<br />
Ext.get("btn").on("click",function(){<br />
Ext.MessageBox.prompt("输入提示框","请输入你的新年愿望:",function(button,text){<br />
if(button=="ok"){<br />
alert("你的新年愿望是:"+text);<br />
}<br />
else alert("你放弃了录入!");<br />
});<br />
});		<br />
});
<p>　　Html页面：</p>
&lt;input id="btn" type="button" value="对话框" /&gt;
<p>　　点击上面的&#8220;对话框&#8221;按钮可以显示如下图所示的内容，如果点击OK按钮则会输入你输入的文本内容，选择cancel按钮则会提示放弃了录入，如下图所示：</p>
<br />
<p align="center"><img alt="" src="http://www.easyjf.com/blog/lengyu/extjs/image055.jpg" /> <img alt="" src="http://www.easyjf.com/blog/lengyu/extjs/image057.jpg" /></p>
<br />
<p align="center"><br />
</p>
<br />
<p align="center"><br />
</p>
<br />
<p align="center"><br />
</p>
<p align="center"><br />
</p>
<p>　　在实际应用中，可以直接使用MessageBox的show方法来显示自定义的对话框，如下面的代码：</p>
function save(button)<br />
{<br />
if(button=="yes")<br />
{<br />
//执行数据保存操作<br />
}<br />
else if(button=="no")<br />
{<br />
//不保存数据<br />
}<br />
else<br />
{<br />
//取消当前操作<br />
}<br />
}<br />
Ext.onReady(function(){	<br />
Ext.get("btn").on("click",function(){<br />
Ext.Msg.show({<br />
title:'保存数据',<br />
msg: '你已经作了一些数据操作，是否要保存当前内容的修改？',<br />
buttons: Ext.Msg.YESNOCANCEL,<br />
fn: save,<br />
icon: Ext.MessageBox.QUESTION});<br />
});		<br />
});
<p>　　点击&#8220;对话框&#8221;按钮可显示一个自定义的保存数据对话框，对话框中包含yes、no、cancel三个按钮，可以在回调函数save中根据点击的按钮执行相应的操作，如图xx所示。</p>
<p align="center"><img alt="" src="http://www.easyjf.com/blog/lengyu/extjs/image059.jpg" /></p>
<pre style="border: 1px dotted #999999; padding: 5px; font-size: 12px; margin-left: 10px; margin-right: 10px; background-color: #eeeeee;"><br />
<span class="content1">
<p align="center"><br />
</p>
<br />
<p align="center"><br />
</p>
<br />
<p align="center"><br />
</p>
<br />
<p align="center"><br />
</p>
<br />
<p align="center"><br />
</p>
<br />
<br />
<p align="center"><br />
</p>
<br />
<p align="center">                                                                                     <br />
</p>
</span><br />
</pre>
<img src ="http://www.blogjava.net/Crying/aggbug/201200.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Crying/" target="_blank">Crying</a> 2008-05-18 10:31 <a href="http://www.blogjava.net/Crying/articles/201200.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>(转)Ext2.0学习入门 </title><link>http://www.blogjava.net/Crying/articles/201079.html</link><dc:creator>Crying</dc:creator><author>Crying</author><pubDate>Sat, 17 May 2008 05:16:00 GMT</pubDate><guid>http://www.blogjava.net/Crying/articles/201079.html</guid><wfw:comment>http://www.blogjava.net/Crying/comments/201079.html</wfw:comment><comments>http://www.blogjava.net/Crying/articles/201079.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Crying/comments/commentRss/201079.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Crying/services/trackbacks/201079.html</trackback:ping><description><![CDATA[<div class="tutorialSummary">本教程适用于Ext 2.0的版本，而<a title="Tutorial:Introduction to Ext" href="http://www.ajaxjs.com/article/2007110411135802.asp">版本1.x</a>仍可找到。 </div>
<p>无论你是Ext库的新手，抑或是想了解Ext的人，本篇文章的内容都适合你。本文将简单地介绍Ext的几个基本概念，和如何快速地做出一个动态的页面并运行起来，假设读者已具备了一些JavaScript经验和简单了解HTML的文档对象模型（document object model ，DOM）。 </p>
<a name=".E4.B8.8B.E8.BD.BDExt"></a>
<h3><span class="mw-headline">下载Ext</span></h3>
<p>如果你未曾下载过，那应从官方网站那里下载最新版本的Ext <a class="external free" title="http://extjs.com/downloads" href="http://extjs.com/downloads" rel="nofollow">http://extjs.com/downloads</a> 。</p>
<p>因应各种的下载需求，有几种不同的可选项。通常地，最稳定的版本，是较多人的选择。下载解包后，那个<strong>example</strong>文件夹便是一个探索Ext的好地方！</p>
<a name=".E5.BC.80.E5.A7.8B.EF.BC.81"></a>
<h3><span class="mw-headline">开始！</span></h3>
<table style="border-right: rgb(47,111,171) 1px solid; border-top: rgb(47,111,171) 1px solid; background: rgb(249,249,249) 0% 50%; float: right; margin: 10px; border-left: rgb(47,111,171) 1px solid; border-bottom: rgb(47,111,171) 1px solid; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial">
    <tbody>
        <tr>
            <td><strong>下载示例文件</strong>
            <ul>
                <li><tt><a class="external text" title="http://extjs.com/downloads/tutorial/introduction-ext/IntroToExt2.zip" href="http://extjs.com/downloads/tutorial/introduction-ext/IntroToExt2.zip" rel="nofollow">IntroToExt2.zip</a></tt> </li>
            </ul>
            </td>
        </tr>
    </tbody>
</table>
<p><br />
</p>
<p>我们将讲讲怎么使用Ext，来完成一些JavaScript常见的任务。如果你想自己试试，就应该先下<tt><a class="external text" title="http://extjs.com/downloads/tutorial/introduction-ext/IntroToExt2.zip" href="http://extjs.com/downloads/tutorial/introduction-ext/IntroToExt2.zip" rel="nofollow">IntroToExt2.zip</a></tt> ，用来构建已下面的Ext代码。</p>
<p>Zip包里有三个文件：<strong>ExtStart.html</strong>, <strong>ExtStart.js</strong>和<strong>ExtStart.css</strong>。解包这三个文件到Ext的安装目录中（例如，Ext是在&#8220;C:\code\Ext\v2.0&#8221;中，那应该在"v2.0"里面新建目录&#8220;tutorial&#8221;。双击<strong>ExtStart.htm</strong>，接着你的浏览器打开启动页面，应该会有一条消息告诉你配置已完毕。如果出现了Javascript错误，请按照页面上的指引操作。</p>
<p>现在在你常用的IDE中或文本编辑器中，打开ExtStart.js看看。</p>
<pre class="source source-javascript">Ext.<span class="me1"><font color="#006600">onReady</font></span><span class="br0"><font color="#66cc66">(</font></span><span class="kw2"><strong><font color="#003366">function</font></strong></span><font color="#66cc66"><span class="br0">(</span><span class="br0">)</span></font> <span class="br0"><font color="#66cc66">{</font></span>
<span class="kw3"><font color="#000066">alert</font></span><span class="br0"><font color="#66cc66">(</font></span><span class="st0"><font color="#3366cc">"Congratulations!  You have Ext configured correctly!"</font></span><span class="br0"><font color="#66cc66">)</font></span>;<br />
<font color="#66cc66"><span class="br0">}</span><span class="br0">)</span></font>;</pre>
<p>Ext.onReady可能是你接触的第一个也可能是在每个页面都要使用的方法。这个方法会在DOM加载全部完毕后，保证页面内的所有元素能被Script引用（reference）之后调用。你可删除alert()那行，加入一些实际用途的代码试试。</p>
<a name="Element.EF.BC.9AExt.E7.9A.84.E6.A0.B8.E5.BF.83"></a>
<h3><span class="mw-headline">Element：Ext的核心</span></h3>
<p>大多数的JavaScript操作都需要先获取页面上的某个元素的引用（reference）,好让你来做些实质性的事情。传统的JavaScript做法，是通过ID获取Dom节点的：</p>
<pre class="source source-javascript"><span class="kw2"><strong><font color="#003366">var</font></strong></span> myDiv = document.<span class="me1"><font color="#006600">getElementById</font></span><span class="br0"><font color="#66cc66">(</font></span><span class="st0"><font color="#3366cc">'myDiv'</font></span><span class="br0"><font color="#66cc66">)</font></span>;</pre>
<p>这毫无问题，不过这样单单返回一个对象（DOM节点），用起来并不是太实用和方便。为了要用那节点干点事情，你还将要手工编写不少的代码；另外，对于不同类型浏览器之间的差异，要处理起来可真头大了。</p>
<p>进入Ext.element 对象。元素（element）的的确确是Ext的心脏地带，--无论是访问元素（elements）还是完成一些其他动作，都要涉及它。Element的API是整个Ext库的基础，如果你时间不多，只是想了解Ext中的一两个类的话，Element一定是首选！</p>
<p>由ID获取一个Ext Element如下（首页ExtStart.htm包含一个div，ID名字为&#8220;myDiv&#8221;，然后，在ExtStart.js中加入下列语句）： The corresponding code to get an Ext Element by ID looks like this (the starter page ExtStart.html contains a div with the id "myDiv," so go ahead and add this code to ExtStart.js): </p>
<pre class="source source-javascript">Ext.<span class="me1"><font color="#006600">onReady</font></span><span class="br0"><font color="#66cc66">(</font></span><span class="kw2"><strong><font color="#003366">function</font></strong></span><font color="#66cc66"><span class="br0">(</span><span class="br0">)</span></font> <span class="br0"><font color="#66cc66">{</font></span>
<span class="kw2"><strong><font color="#003366">var</font></strong></span> myDiv = Ext.<span class="me1"><font color="#006600">get</font></span><span class="br0"><font color="#66cc66">(</font></span><span class="st0"><font color="#3366cc">'myDiv'</font></span><span class="br0"><font color="#66cc66">)</font></span>;<br />
<font color="#66cc66"><span class="br0">}</span><span class="br0">)</span></font>;</pre>
<p>再回头看看Element对象，发现什么有趣的东东呢？</p>
<ul>
    <li>Element包含了常见的DOM方法和属性，提供一个快捷的、统一的、跨浏览器的接口（若使用Element.dom的话，就可以直接访问底层DOM的节点。）；
    <li>Element.get()方法提供内置缓存（Cache)，多次访问同一对象效率上有极大优势；
    <li>内置常用的DOM节点的动作，并且是跨浏览器的定位的位置、大小、动画、拖放等等（add/remove CSS classes, add/remove event handlers, positioning, sizing, animation, drag/drop）。 </li>
</ul>
<p>这意味着你可用少量的代码来做各种各样的事情，这里仅仅是一个简单的例子（完整的列表在<a class="external text" title="http://extjs.com/deploy/dev/docs/?class=Ext.Element" href="http://extjs.com/deploy/dev/docs/?class=Ext.Element" rel="nofollow">Element API 文档</a>中）。</p>
<p>继续在ExtStart.js中，在刚才我们获取好myDiv的位置中加入：</p>
<pre class="source source-javascript">myDiv.<span class="me1"><font color="#006600">highlight</font></span><font color="#66cc66"><span class="br0">(</span><span class="br0">)</span></font>;      <span class="co1"><em><font color="#009900">//黄色高亮显示然后渐退</font></em></span>
myDiv.<span class="me1"><font color="#006600">addClass</font></span><span class="br0"><font color="#66cc66">(</font></span><span class="st0"><font color="#3366cc">'red'</font></span><span class="br0"><font color="#66cc66">)</font></span>;  <span class="co1"><em><font color="#009900">// 添加自定义CSS类 (在ExtStart.css定义)</font></em></span>
myDiv.<span class="me1"><font color="#006600">center</font></span><font color="#66cc66"><span class="br0">(</span><span class="br0">)</span></font>;         <span class="co1"><em><font color="#009900">//在视图中将元素居中</font></em></span>
myDiv.<span class="me1"><font color="#006600">setOpacity</font></span><span class="br0"><font color="#66cc66">(</font></span>.<span class="nu0"><font color="#cc0000">25</font></span><span class="br0"><font color="#66cc66">)</font></span>;  <span class="co1"><em><font color="#009900">// 使元素半透明</font></em></span></pre>
<a name=".E8.8E.B7.E5.8F.96.E5.A4.9A.E4.B8.AADOM.E7.9A.84.E8.8A.82.E7.82.B9"></a>
<h3><span class="mw-headline">获取多个DOM的节点</span></h3>
<p>通常情况下，想获取多个DOM的节点，难以依靠ID的方式来获取。有可能因为没设置ID,或者你不知道ID,又或者直接用ID方式引用有太多元素了。这种情况下，你就会不用ID来作为获取元素的依据，可能会用属性（attribute）或CSS Classname代替。基于以上的原因，Ext引入了一个异常强大的Dom Selector库，叫做DomQuery。</p>
<p><a class="external text" title="http://extjs.com/deploy/dev/docs/?class=Ext.DomQuery" href="http://extjs.com/deploy/dev/docs/?class=Ext.DomQuery" rel="nofollow">DomQuery</a>可作为单独的库使用，但常用于Ext，你可以在上下文环境中（Context）获取多个元素，然后通过Element接口调用。令人欣喜的是，Element对象本身便有Element.selcect的方法来实现查询，即内部调用DomQuery选取元素。这个简单的例子中，ExtStart.htm包含若干段落（ </p>
<p>标签），没有一个是有ID的，而你想轻松地通过一次操作马上获取每一段，全体执行它们的动作，可以这样做：</p>
<pre class="source source-javascript"><span class="co1"><em><font color="#009900">// 每段高亮显示</font></em></span>
Ext.<span class="me1"><font color="#006600">select</font></span><span class="br0"><font color="#66cc66">(</font></span><span class="st0"><font color="#3366cc">'p'</font></span><span class="br0"><font color="#66cc66">)</font></span>.<span class="me1"><font color="#006600">highlight</font></span><font color="#66cc66"><span class="br0">(</span><span class="br0">)</span></font>;</pre>
<p>Element.select在这个例子中的方便性显露无疑。它返回一个<a class="external text" title="http://extjs.com/deploy/dev/docs/?class=Ext.CompositeElement" href="http://extjs.com/deploy/dev/docs/?class=Ext.CompositeElement" rel="nofollow">复合元素</a>，能通过元素接口（Element interface）访问每个元素。这样做的好处是可不用循环和不分别访问每一个元素。 </p>
<p>DomQuery的选取参数可以是一段较长的数组，其中包括W3C CSS3 Dom选取器、基本XPatch、HTML属性和更多，请参阅<a class="external text" title="http://extjs.com/deploy/dev/docs/?class=Ext.DomQuery" href="http://extjs.com/deploy/dev/docs/?class=Ext.DomQuery" rel="nofollow">DomQuery API文档</a>以了解这功能强大的库个中细节。</p>
<a name=".E5.93.8D.E5.BA.94.E4.BA.8B.E4.BB.B6"></a>
<h3><span class="mw-headline">响应事件</span></h3>
<p>到这范例为止，我们所写的代码都是放在onReady中，即当页面加载后总会立即执行，功能较单一——这样的话，你便知道，如何响应某个动作或事件来执行你希望做的事情，做法是，先分配一个function，再定义一个event handler事件处理器来响应。我们由这个简单的范例开始，打开ExtStart.js，编辑下列的代码：</p>
<pre class="source source-javascript">Ext.<span class="me1"><font color="#006600">onReady</font></span><span class="br0"><font color="#66cc66">(</font></span><span class="kw2"><strong><font color="#003366">function</font></strong></span><font color="#66cc66"><span class="br0">(</span><span class="br0">)</span></font> <span class="br0"><font color="#66cc66">{</font></span>
Ext.<span class="me1"><font color="#006600">get</font></span><span class="br0"><font color="#66cc66">(</font></span><span class="st0"><font color="#3366cc">'myButton'</font></span><span class="br0"><font color="#66cc66">)</font></span>.<span class="me1"><font color="#006600">on</font></span><span class="br0"><font color="#66cc66">(</font></span><span class="st0"><font color="#3366cc">'click'</font></span>, <span class="kw2"><strong><font color="#003366">function</font></strong></span><font color="#66cc66"><span class="br0">(</span><span class="br0">)</span><span class="br0">{</span></font>
<span class="kw3"><font color="#000066">alert</font></span><span class="br0"><font color="#66cc66">(</font></span><span class="st0"><font color="#3366cc">"你单击了按钮"</font></span><span class="br0"><font color="#66cc66">)</font></span>;<br />
<font color="#66cc66"><span class="br0">}</span><span class="br0">)</span></font>;<br />
<font color="#66cc66"><span class="br0">}</span><span class="br0">)</span></font>;</pre>
<p>代码依然会加载好页面后执行，不过重要的区别是，包含alert()的function是已定义好的，但它不会立即地被执行，是分配到按钮的单击事件中。用浅显的文字解释，就是：获取ID为'myDottom'元素的引用，监听任何发生这个元素上被单击的情况，并分配一个function,以准备任何单击元素的情况。</p>
<p>一般来说，Element.select也能做同样的事情，即作用在获取一组元素上。下一例中，演示了页面中的某一段落被单击后，便有弹出窗口：</p>
<pre class="source source-javascript">Ext.<span class="me1"><font color="#006600">onReady</font></span><span class="br0"><font color="#66cc66">(</font></span><span class="kw2"><strong><font color="#003366">function</font></strong></span><font color="#66cc66"><span class="br0">(</span><span class="br0">)</span></font> <span class="br0"><font color="#66cc66">{</font></span>
Ext.<span class="me1"><font color="#006600">select</font></span><span class="br0"><font color="#66cc66">(</font></span><span class="st0"><font color="#3366cc">'p'</font></span><span class="br0"><font color="#66cc66">)</font></span>.<span class="me1"><font color="#006600">on</font></span><span class="br0"><font color="#66cc66">(</font></span><span class="st0"><font color="#3366cc">'click'</font></span>, <span class="kw2"><strong><font color="#003366">function</font></strong></span><font color="#66cc66"><span class="br0">(</span><span class="br0">)</span></font> <span class="br0"><font color="#66cc66">{</font></span>
<span class="kw3"><font color="#000066">alert</font></span><span class="br0"><font color="#66cc66">(</font></span><span class="st0"><font color="#3366cc">"你单击一段落;"</font></span><span class="br0"><font color="#66cc66">)</font></span>;<br />
<font color="#66cc66"><span class="br0">}</span><span class="br0">)</span></font>;<br />
<font color="#66cc66"><span class="br0">}</span><span class="br0">)</span></font>;</pre>
<p>这两个例子中，事件处理的function均是简单几句，没有函数的名称，这种类型函数称为&#8220;匿名函数（anonymous function）&#8221;，即是没有名的的函数。你也可以分配一个有名字的event handler,这对于代码的重用或多个事件很有用。下一例等效于上一例：</p>
<pre class="source source-javascript">Ext.<span class="me1"><font color="#006600">onReady</font></span><span class="br0"><font color="#66cc66">(</font></span><span class="kw2"><strong><font color="#003366">function</font></strong></span><font color="#66cc66"><span class="br0">(</span><span class="br0">)</span></font> <span class="br0"><font color="#66cc66">{</font></span>
<span class="kw2"><strong><font color="#003366">var</font></strong></span> paragraphClicked = <span class="kw2"><strong><font color="#003366">function</font></strong></span><font color="#66cc66"><span class="br0">(</span><span class="br0">)</span></font> <span class="br0"><font color="#66cc66">{</font></span>
<span class="kw3"><font color="#000066">alert</font></span><span class="br0"><font color="#66cc66">(</font></span>"You clicked a paragraph"<span class="br0"><font color="#66cc66">)</font></span>;<br />
<span class="br0"><font color="#66cc66">}</font></span>
Ext.<span class="me1"><font color="#006600">select</font></span><span class="br0"><font color="#66cc66">(</font></span><span class="st0"><font color="#3366cc">'p'</font></span><span class="br0"><font color="#66cc66">)</font></span>.<span class="me1"><font color="#006600">on</font></span><span class="br0"><font color="#66cc66">(</font></span><span class="st0"><font color="#3366cc">'click'</font></span>, paragraphClicked<span class="br0"><font color="#66cc66">)</font></span>;<br />
<font color="#66cc66"><span class="br0">}</span><span class="br0">)</span></font>;</pre>
<p>到目前为止，我们已经知道如何执行某个动作。但当事件触发时，我们如何得知这个event handler执行时是作用在哪一个特定的元素上呢？要明确这一点非常简单，Element.on方法传入到even handler的function中（我们这里先讨论第一个参数，不过你应该浏览API文档以了解even handler更多的细节）。在我们之前的例子中，function是忽略这些参数的，到这里可有少许的改变，——我们在功能上提供了更深层次的控制。必须先说明的是，这实际上是Ext的事件对象（event object）,一个跨浏览器和拥有更多控制的事件的对象。例如，可以用下列的语句，得到这个事件响应所在的DOM节点：<br />
</p>
<pre class="source source-javascript">Ext.<span class="me1"><font color="#006600">onReady</font></span><span class="br0"><font color="#66cc66">(</font></span><span class="kw2"><strong><font color="#003366">function</font></strong></span><font color="#66cc66"><span class="br0">(</span><span class="br0">)</span></font> <span class="br0"><font color="#66cc66">{</font></span>
<span class="kw2"><strong><font color="#003366">var</font></strong></span> paragraphClicked = <span class="kw2"><strong><font color="#003366">function</font></strong></span><span class="br0"><font color="#66cc66">(</font></span>e<span class="br0"><font color="#66cc66">)</font></span> <span class="br0"><font color="#66cc66">{</font></span>
Ext.<span class="me1"><font color="#006600">get</font></span><span class="br0"><font color="#66cc66">(</font></span>e.<span class="me1"><font color="#006600">target</font></span><span class="br0"><font color="#66cc66">)</font></span>.<span class="me1"><font color="#006600">highlight</font></span><font color="#66cc66"><span class="br0">(</span><span class="br0">)</span></font>;<br />
<span class="br0"><font color="#66cc66">}</font></span>
Ext.<span class="me1"><font color="#006600">select</font></span><span class="br0"><font color="#66cc66">(</font></span><span class="st0"><font color="#3366cc">'p'</font></span><span class="br0"><font color="#66cc66">)</font></span>.<span class="me1"><font color="#006600">on</font></span><span class="br0"><font color="#66cc66">(</font></span><span class="st0"><font color="#3366cc">'click'</font></span>, paragraphClicked<span class="br0"><font color="#66cc66">)</font></span>;<br />
<font color="#66cc66"><span class="br0">}</span><span class="br0">)</span></font>;</pre>
<p>注意得到的e.target是DOM节点，所以我们首先将其转换成为EXT的Elemnet元素，然后执行欲完成的事件，这个例子中，我们看见段落是高亮显示的。<br />
</p>
<a name=".E4.BD.BF.E7.94.A8Widgets"></a>
<h3><span class="mw-headline">使用Widgets</span></h3>
<pre> (Widget原意为&#8220;小器件&#8221;，现指页面中UI控件)<br />
</pre>
<p>除了我们已经讨论过的核心JavaScript库，当前的Ext亦包括了一系列的最前端的JavaScirptUI组件库。文本以一些常用的widget为例子，作简单的介绍。</p>
<a name="MessageBox"></a>
<h4><span class="mw-headline">MessageBox</span></h4>
<p>比起略为沉闷的&#8220;HelloWolrd&#8221;消息窗口，我们做少许变化，前面我们写的代码是，单击某个段落便会高亮显示，现在是单击段落，在消息窗口中显示段落内容出来。<br />
在上面的paragraphClicked的function中，将这行代码： </p>
<pre class="source source-javascript">Ext.<span class="me1"><font color="#006600">get</font></span><span class="br0"><font color="#66cc66">(</font></span>e.<span class="me1"><font color="#006600">target</font></span><span class="br0"><font color="#66cc66">)</font></span>.<span class="me1"><font color="#006600">highlight</font></span><font color="#66cc66"><span class="br0">(</span><span class="br0">)</span></font>;</pre>
<p>替换为：</p>
<pre class="source source-javascript"><span class="kw2"><strong><font color="#003366">var</font></strong></span> paragraph = Ext.<span class="me1"><font color="#006600">get</font></span><span class="br0"><font color="#66cc66">(</font></span>e.<span class="me1"><font color="#006600">target</font></span><span class="br0"><font color="#66cc66">)</font></span>;<br />
paragraph.<span class="me1"><font color="#006600">highlight</font></span><font color="#66cc66"><span class="br0">(</span><span class="br0">)</span></font>;<br />
Ext.<span class="me1"><font color="#006600">MessageBox</font></span>.<span class="me1"><font color="#006600">show</font></span><font color="#66cc66"><span class="br0">(</span><span class="br0">{</span></font>
title: <span class="st0"><font color="#3366cc">'Paragraph Clicked'</font></span>,<br />
msg: paragraph.<span class="me1"><font color="#006600">dom</font></span>.<span class="me1"><font color="#006600">innerHTML</font></span>,<br />
width:<span class="nu0"><font color="#cc0000">400</font></span>,<br />
buttons: Ext.<span class="me1"><font color="#006600">MessageBox</font></span>.<span class="me1"><font color="#006600">OK</font></span>,<br />
animEl: paragraph<br />
<font color="#66cc66"><span class="br0">}</span><span class="br0">)</span></font>;</pre>
<p>这里有些新的概念需要讨论一下。在第一行中我们创建了一个局部变量（Local Variable）来保存某个元素的引用，即被单击的那个DOM节点（本例中，DOM节点指的是段落paragrah,事因我们已经定义该事件与 </p>
<p>标签发生关联的了）。为什么要这样做呢？嗯...观察上面的代码，我们需要引用同一元素来高亮显示，在MessageBox中也是引用同一元素作为参数使用。<br />
一般来说，多次重复使用同一值（Value）或对象，是一个不好的方式，所以，作为一个具备良好OO思维的开发者，应该是将其分配到一个局部变量中，反复使用这变量！</p>
<p>现在，为了我们接下来阐述新概念的演示，请观察MessageBox的调用。乍一看，这像一连串的参数传入到方法中，但仔细看，这是一个非常特别的语法。实际上，传入到MessageBox.show的只有一个参数：一个Object literal,包含一组属性和属性值。在Javascript中，Object Literal是动态的，你可在任何时候用{和}创建一个典型的对象(object)。其中的字符由一系列的name/value组成的属性，属性的格式是[property name]:[property value]。在整个Ext中，你将会经常遇到这种语法，因此你应该马上消化并吸收这个知识点！<br />
使用Object Literal的原因是什么呢？主要的原因是&#8220;可伸缩性（flexibility）&#8221;的考虑"，随时可新增、删除属性，亦可不管顺序地插入。而方法不需要改变。这也是多个参数的情况下，为最终开发者带来不少的方便（本例中的MessageBox.show())。例如，我们说这儿的foo.action方法，有四个参数，而只有一个是你必须传入的。本例中，你想像中的代码可能会是这样的foo.action(null, null, null, 'hello').,若果那方法用Object Literal来写，却是这样， foo.action({ param4: 'hello' })，这更易用和易读。</p>
<a name="Grid"></a>
<h4><span class="mw-headline">Grid</span></h4>
<p>Grid是Ext中人们最想先睹为快的和最为流行Widgets之一。好，让我们看看怎么轻松地创建一个Grid并运行。用下列代码替换ExtStart.js中全部语句：</p>
<pre class="source source-javascript">Ext.<span class="me1"><font color="#006600">onReady</font></span><span class="br0"><font color="#66cc66">(</font></span><span class="kw2"><strong><font color="#003366">function</font></strong></span><font color="#66cc66"><span class="br0">(</span><span class="br0">)</span></font> <span class="br0"><font color="#66cc66">{</font></span>
<span class="kw2"><strong><font color="#003366">var</font></strong></span> myData = <span class="br0"><font color="#66cc66">[</font></span>
<span class="br0"><font color="#66cc66">[</font></span><span class="st0"><font color="#3366cc">'Apple'</font></span>,<span class="nu0"><font color="#cc0000">29.89</font></span>,<span class="nu0"><font color="#cc0000">0.24</font></span>,<span class="nu0"><font color="#cc0000">0.81</font></span>,<span class="st0"><font color="#3366cc">'9/1 12:00am'</font></span><span class="br0"><font color="#66cc66">]</font></span>,<br />
<span class="br0"><font color="#66cc66">[</font></span><span class="st0"><font color="#3366cc">'Ext'</font></span>,<span class="nu0"><font color="#cc0000">83.81</font></span>,<span class="nu0"><font color="#cc0000">0.28</font></span>,<span class="nu0"><font color="#cc0000">0.34</font></span>,<span class="st0"><font color="#3366cc">'9/12 12:00am'</font></span><span class="br0"><font color="#66cc66">]</font></span>,<br />
<span class="br0"><font color="#66cc66">[</font></span><span class="st0"><font color="#3366cc">'Google'</font></span>,<span class="nu0"><font color="#cc0000">71.72</font></span>,<span class="nu0"><font color="#cc0000">0.02</font></span>,<span class="nu0"><font color="#cc0000">0.03</font></span>,<span class="st0"><font color="#3366cc">'10/1 12:00am'</font></span><span class="br0"><font color="#66cc66">]</font></span>,<br />
<span class="br0"><font color="#66cc66">[</font></span><span class="st0"><font color="#3366cc">'Microsoft'</font></span>,<span class="nu0"><font color="#cc0000">52.55</font></span>,<span class="nu0"><font color="#cc0000">0.01</font></span>,<span class="nu0"><font color="#cc0000">0.02</font></span>,<span class="st0"><font color="#3366cc">'7/4 12:00am'</font></span><span class="br0"><font color="#66cc66">]</font></span>,<br />
<span class="br0"><font color="#66cc66">[</font></span><span class="st0"><font color="#3366cc">'Yahoo!'</font></span>,<span class="nu0"><font color="#cc0000">29.01</font></span>,<span class="nu0"><font color="#cc0000">0.42</font></span>,<span class="nu0"><font color="#cc0000">1.47</font></span>,<span class="st0"><font color="#3366cc">'5/22 12:00am'</font></span><span class="br0"><font color="#66cc66">]</font></span>
<span class="br0"><font color="#66cc66">]</font></span>;<br />
<br />
<span class="kw2"><strong><font color="#003366">var</font></strong></span> myReader = <span class="kw2"><strong><font color="#003366">new</font></strong></span> Ext.<span class="me1"><font color="#006600">data</font></span>.<span class="me1"><font color="#006600">ArrayReader</font></span><font color="#66cc66"><span class="br0">(</span><span class="br0">{</span><span class="br0">}</span></font>, <span class="br0"><font color="#66cc66">[</font></span>
<span class="br0"><font color="#66cc66">{</font></span><span class="kw3"><font color="#000066">name</font></span>: <span class="st0"><font color="#3366cc">'company'</font></span><span class="br0"><font color="#66cc66">}</font></span>,<br />
<span class="br0"><font color="#66cc66">{</font></span><span class="kw3"><font color="#000066">name</font></span>: <span class="st0"><font color="#3366cc">'price'</font></span>, type: <span class="st0"><font color="#3366cc">'float'</font></span><span class="br0"><font color="#66cc66">}</font></span>,<br />
<span class="br0"><font color="#66cc66">{</font></span><span class="kw3"><font color="#000066">name</font></span>: <span class="st0"><font color="#3366cc">'change'</font></span>, type: <span class="st0"><font color="#3366cc">'float'</font></span><span class="br0"><font color="#66cc66">}</font></span>,<br />
<span class="br0"><font color="#66cc66">{</font></span><span class="kw3"><font color="#000066">name</font></span>: <span class="st0"><font color="#3366cc">'pctChange'</font></span>, type: <span class="st0"><font color="#3366cc">'float'</font></span><span class="br0"><font color="#66cc66">}</font></span>,<br />
<span class="br0"><font color="#66cc66">{</font></span><span class="kw3"><font color="#000066">name</font></span>: <span class="st0"><font color="#3366cc">'lastChange'</font></span>, type: <span class="st0"><font color="#3366cc">'date'</font></span>, dateFormat: <span class="st0"><font color="#3366cc">'n/j h:ia'</font></span><span class="br0"><font color="#66cc66">}</font></span>
<font color="#66cc66"><span class="br0">]</span><span class="br0">)</span></font>;<br />
<br />
<span class="kw2"><strong><font color="#003366">var</font></strong></span> grid = <span class="kw2"><strong><font color="#003366">new</font></strong></span> Ext.<span class="me1"><font color="#006600">grid</font></span>.<span class="me1"><font color="#006600">GridPanel</font></span><font color="#66cc66"><span class="br0">(</span><span class="br0">{</span></font>
store: <span class="kw2"><strong><font color="#003366">new</font></strong></span> Ext.<span class="me1"><font color="#006600">data</font></span>.<span class="me1"><font color="#006600">Store</font></span><font color="#66cc66"><span class="br0">(</span><span class="br0">{</span></font>
data: myData,
reader: myReader
<font color="#66cc66"><span class="br0">}</span><span class="br0">)</span></font>,<br />
columns: <span class="br0"><font color="#66cc66">[</font></span>
<span class="br0"><font color="#66cc66">{</font></span>header: <span class="st0"><font color="#3366cc">"Company"</font></span>, width: <span class="nu0"><font color="#cc0000">120</font></span>, sortable: <span class="kw2"><strong><font color="#003366">true</font></strong></span>, dataIndex: <span class="st0"><font color="#3366cc">'company'</font></span><span class="br0"><font color="#66cc66">}</font></span>,<br />
<span class="br0"><font color="#66cc66">{</font></span>header: <span class="st0"><font color="#3366cc">"Price"</font></span>, width: <span class="nu0"><font color="#cc0000">90</font></span>, sortable: <span class="kw2"><strong><font color="#003366">true</font></strong></span>, dataIndex: <span class="st0"><font color="#3366cc">'price'</font></span><span class="br0"><font color="#66cc66">}</font></span>,<br />
<span class="br0"><font color="#66cc66">{</font></span>header: <span class="st0"><font color="#3366cc">"Change"</font></span>, width: <span class="nu0"><font color="#cc0000">90</font></span>, sortable: <span class="kw2"><strong><font color="#003366">true</font></strong></span>, dataIndex: <span class="st0"><font color="#3366cc">'change'</font></span><span class="br0"><font color="#66cc66">}</font></span>,<br />
<span class="br0"><font color="#66cc66">{</font></span>header: <span class="st0"><font color="#3366cc">"% Change"</font></span>, width: <span class="nu0"><font color="#cc0000">90</font></span>, sortable: <span class="kw2"><strong><font color="#003366">true</font></strong></span>, dataIndex: <span class="st0"><font color="#3366cc">'pctChange'</font></span><span class="br0"><font color="#66cc66">}</font></span>,<br />
<span class="br0"><font color="#66cc66">{</font></span>header: <span class="st0"><font color="#3366cc">"Last Updated"</font></span>, width: <span class="nu0"><font color="#cc0000">120</font></span>, sortable: <span class="kw2"><strong><font color="#003366">true</font></strong></span>, <br />
renderer: Ext.<span class="me1"><font color="#006600">util</font></span>.<span class="me1"><font color="#006600">Format</font></span>.<span class="me1"><font color="#006600">dateRenderer</font></span><span class="br0"><font color="#66cc66">(</font></span><span class="st0"><font color="#3366cc">'m/d/Y'</font></span><span class="br0"><font color="#66cc66">)</font></span>, <br />
dataIndex: <span class="st0"><font color="#3366cc">'lastChange'</font></span><span class="br0"><font color="#66cc66">}</font></span>
<span class="br0"><font color="#66cc66">]</font></span>,<br />
viewConfig: <span class="br0"><font color="#66cc66">{</font></span>
forceFit: <span class="kw2"><strong><font color="#003366">true</font></strong></span>
<span class="br0"><font color="#66cc66">}</font></span>,<br />
renderTo: <span class="st0"><font color="#3366cc">'content'</font></span>,<br />
title: <span class="st0"><font color="#3366cc">'My First Grid'</font></span>,<br />
width: <span class="nu0"><font color="#cc0000">500</font></span>,<br />
frame: <span class="kw2"><strong><font color="#003366">true</font></strong></span>
<font color="#66cc66"><span class="br0">}</span><span class="br0">)</span></font>;<br />
<br />
grid.<span class="me1"><font color="#006600">getSelectionModel</font></span><font color="#66cc66"><span class="br0">(</span><span class="br0">)</span></font>.<span class="me1"><font color="#006600">selectFirstRow</font></span><font color="#66cc66"><span class="br0">(</span><span class="br0">)</span></font>;<br />
<font color="#66cc66"><span class="br0">}</span><span class="br0">)</span></font>;</pre>
<p>这看上去很复杂，但实际上加起来，只有<strong>四行</strong>代码（不包含测试数据的代码）。 </p>
<ul>
    <li>第一行创建数组并作为数据源。实际案例中，你很可能从数据库、或者WebService那里得到动态的数据。
    <li>接着，我们创建并加载data store， data store将会告诉Ext的底层库接手处理和格式化这些数据。不同的数据类型须在类Reader中指明。
    <li>接着，我们创建一个Grid的组件，传入各种的配置值，有：
    <ul>
        <li>新的data store, 配置好测试数据和reader
        <li>列模型column model定义了 <tt>列columns</tt>的配置
        <li>其他的选择指定了Grid所需的功能 </li>
    </ul>
    <li>最后，通过SelectionModel告诉Grid高亮显示第一行。 </li>
</ul>
<p>不是太困难吧？如果一切顺利，完成之后你会看到像这样的： </p>
<p style="margin-left: 50px"><a class="image" title="Image:IntroToExt2_grid.gif" href="http://extjs.com/learn/Image:IntroToExt2_grid.gif"><img height="173" alt="Image:IntroToExt2_grid.gif" src="http://extjs.com/learn/w/images/9/90/IntroToExt2_grid.gif" width="506" longdesc="/learn/Image:IntroToExt2_grid.gif" /></a></p>
<p>当然，你现在还未掌握这段代码的某些细节，但先不要紧，这个例子的目的是告诉你，只要学习了少量的几行代码，创建一个富界面的多功能的UI组件是可能的。更多的grid细节读者可作为一种练习去学习。这儿有许多学习Grid的资源，Ext Grid教程、<a class="external text" title="http://extjs.com/deploy/dev/examples/" href="http://extjs.com/deploy/dev/examples/" rel="nofollow">Grid交互演示</a>交和<a class="external text" title="http://extjs.com/deploy/dev/docs/?class=Ext.grid.GridPanel" href="http://extjs.com/deploy/dev/docs/?class=Ext.grid.GridPanel" rel="nofollow">Grid API文档</a>。 </p>
<a name=".E8.BF.98.E6.9C.89.E6.9B.B4.E5.A4.9A.E7.9A.84.."></a>
<h4><span class="mw-headline">还有更多的..</span></h4>
<p>这只是冰山一角。还有一打的UI Widgets可以供调用，如 layouts, tabs, menus, toolbars, dialogs, tree view等等。请探索 <a class="external text" title="http://extjs.com/deploy/dev/examples/" href="http://extjs.com/deploy/dev/examples/" rel="nofollow">范例演示</a>。 </p>
<a name=".E4.BD.BF.E7.94.A8Ajax"></a>
<h3><span class="editsection"><a title="編輯小節: 使用Ajax" href="http://extjs.com/learn/w/index.php?title=Tutorial:Introduction_to_Ext_2.0_%28Chinese%29&amp;action=edit&amp;section=10">編輯</a></span> <span class="mw-headline">使用Ajax</span></h3>
<p>在弄好一些页面后，你已经懂得在页面和脚本之间的交互（interact）原理。接下来，你应该掌握的是，怎样与远程服务器（remote server）交换数据，常见的是从数据库加载数据（load）或是保存数据（save）到数据库中。通过JavaScript异步无刷新交换数据的这种方式，就是所谓的Ajax。Ext内建卓越的Ajax支持，例如，一个普遍的用户操作就是，异步发送一些东西到服务器，然后，UI元素根据回应（Response）作出更新。这是一个包含text input的表单，一个div用于显示消息（注意，你可以在ExtStart.html中加入下列代码，但这必须要访问服务器）：<br />
<br />
<span class="sc2"><span class="kw2"><strong>&lt;div</strong></span><font color="#009900"> </font><span class="kw3"><font color="#000066">id</font></span><font color="#009900">=</font><span class="st0"><font color="#ff0000">"msg"</font></span><span class="kw2"><strong>&gt;</strong></span></span><span class="sc2"><span class="kw2"><strong>&lt;/div&gt;</strong></span></span><br />
<span class="sc2"><span class="kw2"><strong>&lt;div&gt;</strong></span></span><br />
&nbsp;&nbsp;&nbsp; Name: <span class="sc2"><span class="kw2"><strong>&lt;input</strong></span><font color="#009900"> </font><span class="kw3"><font color="#000066">type</font></span><font color="#009900">=</font><span class="st0"><font color="#ff0000">"text"</font></span><font color="#009900"> </font><span class="kw3"><font color="#000066">id</font></span><font color="#009900">=</font><span class="st0"><font color="#ff0000">"name"</font></span><font color="#009900"> /</font><span class="kw2"><strong>&gt;</strong></span></span><br />
&nbsp;&nbsp;&nbsp; <span class="sc2"><span class="kw2"><strong>&lt;input</strong></span><font color="#009900"> </font><span class="kw3"><font color="#000066">type</font></span><font color="#009900">=</font><span class="st0"><font color="#ff0000">"button"</font></span><font color="#009900"> </font><span class="kw3"><font color="#000066">id</font></span><font color="#009900">=</font><span class="st0"><font color="#ff0000">"okButton"</font></span><font color="#009900"> </font><span class="kw3"><font color="#000066">value</font></span><font color="#009900">=</font><span class="st0"><font color="#ff0000">"OK"</font></span><font color="#009900"> /</font><span class="kw2"><strong>&gt;</strong></span></span><br />
<span class="sc2"><span class="kw2"><strong>&lt;/div&gt;</strong></span></span><br />
<span class="sc2"><span class="kw2"><strong>&lt;div</strong></span><font color="#009900"> </font><span class="kw3"><font color="#000066">id</font></span><font color="#009900">=</font><span class="st0"><font color="#ff0000">"msg"</font></span><span class="kw2"><strong>&gt;</strong></span></span><span class="sc2"><span class="kw2"><strong>&lt;/div&gt;<br />
<br />
</strong>
<p>接着，我们加入这些处理交换数据的JavaScript代码到文件ExtStart.js中(用下面的代码覆盖)：</p>
<p><br />
</p>
<pre class="source source-javascript">Ext.<span class="me1"><font color="#006600">onReady</font></span><span class="br0"><font color="#66cc66">(</font></span><span class="kw2"><font color="#003366">function</font></span><font color="#66cc66"><span class="br0">(</span><span class="br0">)</span><span class="br0">{</span></font>
Ext.<span class="me1"><font color="#006600">get</font></span><span class="br0"><font color="#66cc66">(</font></span><span class="st0"><font color="#3366cc">'okButton'</font></span><span class="br0"><font color="#66cc66">)</font></span>.<span class="me1"><font color="#006600">on</font></span><span class="br0"><font color="#66cc66">(</font></span><span class="st0"><font color="#3366cc">'click'</font></span>, <span class="kw2"><font color="#003366">function</font></span><font color="#66cc66"><span class="br0">(</span><span class="br0">)</span><span class="br0">{</span></font>
<span class="kw2"><font color="#003366">var</font></span> msg = Ext.<span class="me1"><font color="#006600">get</font></span><span class="br0"><font color="#66cc66">(</font></span><span class="st0"><font color="#3366cc">'msg'</font></span><span class="br0"><font color="#66cc66">)</font></span>;
msg.<span class="me1"><font color="#006600">load</font></span><font color="#66cc66"><span class="br0">(</span><span class="br0">{</span></font>
url: <span class="st0"><font color="#3366cc">'ajax-example.php'</font></span>, <span class="co1"><em><font color="#009900">// &lt;-- 按实际改动</font></em></span>
params: <span class="st0"><font color="#3366cc">'name='</font></span> + Ext.<span class="me1"><font color="#006600">get</font></span><span class="br0"><font color="#66cc66">(</font></span><span class="st0"><font color="#3366cc">'name'</font></span><span class="br0"><font color="#66cc66">)</font></span>.<span class="me1"><font color="#006600">dom</font></span>.<span class="me1"><font color="#006600">value</font></span>,
text: <span class="st0"><font color="#3366cc">'Updating...'</font></span>
<font color="#66cc66"><span class="br0">}</span><span class="br0">)</span></font>;
msg.<span class="me1"><font color="#006600">show</font></span><font color="#66cc66"><span class="br0">(</span><span class="br0">)</span></font>;
<font color="#66cc66"><span class="br0">}</span><span class="br0">)</span></font>;
<font color="#66cc66"><span class="br0">}</span><span class="br0">)</span></font>;</pre>
<p>注意： 这个例子需要web server才可运行。 浏览器的URL地址不应是以<em>file://</em>开头，而是<em>http://</em>开头，否则的话Ajax的数据交互将不会工作。Localhost就可以工作得很好，但必须是通过http的。 </p>
<p>这种模式看起来已经比较熟悉了吧！先获取按钮元素，加入一个匿名函数监听单击。在事件处理器中（event handler），我们使用一个负责处理Ajax请求、接受响应（Response）和更新另一个元素的Ext内建类，称作UpdateManager<a class="external text" title="http://extjs.com/deploy/dev/docs/?class=Ext.Updater" href="http://extjs.com/deploy/dev/docs/?class=Ext.Updater" rel="nofollow">Updater</a>。UpdateManager可以直接使用，或者和我们现在的做法一样，通过Element的load方法来引用（本例中该元素是id为&#8220;msg&#8220;的div）。当使用<a class="external text" title="http://extjs.com/deploy/dev/docs/?class=Ext.Element&amp;member=load" href="http://extjs.com/deploy/dev/docs/?class=Ext.Element&amp;member=load" rel="nofollow">Element.load</a>方法，请求（request)会在加工处理后发送，等待服务器的响应（Response），来自动替换元素的innerHTML。简单传入服务器url地址，加上字符串参数，便可以处理这个请求（本例中，参数值来自&#8220;name&#8221;元素的value),而text值是请求发送时提示的文本，完毕后显示那个msg的div（因为开始时默认隐藏）。当然，和大多数Ext组件一样，<a class="external text" title="http://extjs.com/deploy/dev/docs/?class=Ext.Ajax" href="http://extjs.com/deploy/dev/docs/?class=Ext.Ajax" rel="nofollow">Ext.Ajax</a> 有许多的参数可选，不同的Ajax请求有不同的方案。而这里仅演示最简单的那种。</p>
<p><br />
</p>
<p>最后一个关于Ajax隐晦的地方就是，服务器实际处理请求和返回（Resposne）是具体过程。这个过程会是一个服务端页面，一个Servlet，一个Http调度过程，一个WebService,甚至是Perl或CGI脚本，即不指定一个服务器都可以处理的http请求。让人无法预料的是，服务器返回什么是服务器的事情，无法给一个标准的例子来覆盖阐述所有的可能性。。</p>
<p>下面的例子是一些常见的语言以方便开始测试(这段代码输出刚才我们传入'name'的那个值到客户端，即发送什么，返回什么，然后在我们刚才写的'msg' div中加入该文本）。PHP的已经包含在下载文件中，文件名为'ajax-example.php'，可换成你自己服务端的代码： </p>
<a name="Plain_PHP"></a>
<h4><span class="mw-headline">Plain PHP</span></h4>
<pre class="source source-php"><span class="kw2">&lt;?php</span> <span class="kw1"><font color="#b1b100">if</font></span><span class="br0"><font color="#66cc66">(</font></span><span class="kw3"><font color="#000066">isset</font></span><span class="br0"><font color="#66cc66">(</font></span><span class="re0"><font color="#0000ff">$_POST</font></span><span class="br0"><font color="#66cc66">[</font></span><span class="st0"><font color="#ff0000">'name'</font></span><font color="#66cc66"><span class="br0">]</span><span class="br0">)</span><span class="br0">)</span></font> <span class="br0"><font color="#66cc66">{</font></span>
<span class="kw3"><font color="#000066">echo</font></span> <span class="st0"><font color="#ff0000">'From Server: '</font></span>.<span class="re0"><font color="#0000ff">$_POST</font></span><span class="br0"><font color="#66cc66">[</font></span><span class="st0"><font color="#ff0000">'name'</font></span><span class="br0"><font color="#66cc66">]</font></span>;
<span class="br0"><font color="#66cc66">}</font></span>
<span class="kw2">?&gt;</span></pre>
<a name="CakePHP"></a>
<h4><span class="mw-headline">CakePHP</span></h4>
<pre class="source source-php"><span class="kw2">&lt;?php</span> <span class="kw1"><font color="#b1b100">if</font></span><span class="br0"><font color="#66cc66">(</font></span><span class="kw3"><font color="#000066">isset</font></span><span class="br0"><font color="#66cc66">(</font></span><span class="re0"><font color="#0000ff">$this</font></span>-&gt;<span class="me1"><font color="#006600">data</font></span><span class="br0"><font color="#66cc66">[</font></span><span class="st0"><font color="#ff0000">'name'</font></span><font color="#66cc66"><span class="br0">]</span><span class="br0">)</span><span class="br0">)</span></font> <span class="br0"><font color="#66cc66">{</font></span>
<span class="re0"><font color="#0000ff">$this</font></span>-&gt;<span class="me1"><font color="#006600">flash</font></span><span class="br0"><font color="#66cc66">(</font></span><span class="st0"><font color="#ff0000">'From Server: '</font></span>.<span class="re0"><font color="#0000ff">$this</font></span>-&gt;<span class="me1"><font color="#006600">data</font></span><span class="br0"><font color="#66cc66">[</font></span><span class="st0"><font color="#ff0000">'name'</font></span><font color="#66cc66"><span class="br0">]</span><span class="br0">)</span></font>;
<span class="br0"><font color="#66cc66">}</font></span>
<span class="kw2">?&gt;</span></pre>
<a name="Django"></a>
<h4><span class="mw-headline">Django</span></h4>
<pre class="source source-python"><span class="kw1"><font color="#ff7700">from</font></span> django.<span class="me1">http</span> <span class="kw1"><font color="#ff7700">import</font></span> HttpResponse
&nbsp;
<span class="kw1"><font color="#ff7700">def</font></span> ajax_request<span class="br0"><font color="#66cc66">(</font></span>request<span class="br0"><font color="#66cc66">)</font></span>:
<span class="kw1"><font color="#ff7700">return</font></span> HttpResponse<span class="br0"><font color="#66cc66">(</font></span><span class="st0"><font color="#483d8b">'From Server: %s'</font></span> % request.<span class="me1">POST</span>.<span class="me1">get</span><span class="br0"><font color="#66cc66">(</font></span><span class="st0"><font color="#483d8b">'name'</font></span>, <span class="st0"><font color="#483d8b">'nada'</font></span><font color="#66cc66"><span class="br0">)</span><span class="br0">)</span></font></pre>
<a name="Perl"></a>
<h4><span class="mw-headline">Perl</span></h4>
<pre class="source source-perl"><span class="co1"><em><font color="#808080">#!/usr/bin/perl</font></em></span>
<span class="kw2">use</span> strict;
<span class="kw2">use</span> warnings;
<span class="kw2">use</span> CGI;
&nbsp;
<span class="kw1"><font color="#b1b100">my</font></span> <span class="re0"><font color="#0000ff">$Query</font></span> = <span class="kw2">new</span> CGI;
&nbsp;
<span class="kw3"><font color="#000066">print</font></span> <span class="re0"><font color="#0000ff">$Query</font></span>-&gt;<span class="me1"><font color="#006600">header</font></span><font color="#66cc66"><span class="br0">(</span><span class="br0">)</span></font>;
<span class="kw3"><font color="#000066">print</font></span> <span class="st0"><font color="#ff0000">"Hello from&nbsp;: "</font></span>.<span class="re0"><font color="#0000ff">$Query</font></span>-&gt;<span class="me1"><font color="#006600">param</font></span><span class="br0"><font color="#66cc66">(</font></span><span class="st0"><font color="#ff0000">'name'</font></span><span class="br0"><font color="#66cc66">)</font></span>;
&nbsp;
<span class="kw3"><font color="#000066">exit</font></span>;</pre>
<a name="ASP.Net"></a>
<h4><span class="mw-headline">ASP.Net</span></h4>
<pre class="source source-csharp"><span class="kw1"><font color="#0600ff">protected</font></span> <span class="kw1"><font color="#0600ff">void</font></span> Page_Load<span class="br0"><font color="#008000">(</font></span><span class="kw4"><font color="#ff0000">object</font></span> sender, EventArgs e<span class="br0"><font color="#008000">)</font></span>
<span class="br0"><font color="#008000">{</font></span>
<span class="kw1"><font color="#0600ff">if</font></span> <span class="br0"><font color="#008000">(</font></span>Request.<span class="me1"><font color="#0000ff">Form</font></span><span class="br0"><font color="#008000">[</font></span><span class="st0"><font color="#808080">"name"</font></span><span class="br0"><font color="#008000">]</font></span>&nbsp;!= <span class="kw1"><font color="#0600ff">null</font></span><span class="br0"><font color="#008000">)</font></span>
<span class="br0"><font color="#008000">{</font></span>
Response.<span class="me1"><font color="#0000ff">Write</font></span><span class="br0"><font color="#008000">(</font></span><span class="st0"><font color="#808080">"From Server: "</font></span> + Request.<span class="me1"><font color="#0000ff">Form</font></span><span class="br0"><font color="#008000">[</font></span><span class="st0"><font color="#808080">"name"</font></span><font color="#008000"><span class="br0">]</span><span class="br0">)</span></font>;
Response.<span class="me1"><font color="#0000ff">End</font></span><font color="#008000"><span class="br0">(</span><span class="br0">)</span></font>;
<span class="br0"><font color="#008000">}</font></span>
<span class="br0"><font color="#008000">}</font></span></pre>
<a name="ColdFusion"></a>
<h4><span class="mw-headline">ColdFusion</span></h4>
<pre class="source source-cfm"><span class="sc3"><span class="kw1"><font color="#990000">&lt;cfif</font></span><font color="#333333"> </font><font color="#0000ff"><span class="kw5">StructKeyExists</span><span class="br0">(</span></font><font color="#333333">form, </font><span class="st0"><font color="#009900">"name"</font></span><span class="br0"><font color="#0000ff">)</font></span><span class="kw1"><font color="#990000">&gt;</font></span></span>
<span class="sc3"><span class="kw1"><font color="#990000">&lt;cfoutput&gt;</font></span></span>From Server: <span class="sc1"><font color="#0000ff">#form.<span class="kw3">name</span>#</font></span><span class="sc3"><span class="kw1"><font color="#990000">&lt;/cfoutput&gt;</font></span></span>
<span class="sc3"><span class="kw1"><font color="#990000">&lt;/cfif&gt;</font></span></span></pre>
<a name="JSP"></a>
<h4><span class="mw-headline">JSP</span></h4>
<pre class="source source-java">From Server: $<span class="br0"><font color="#66cc66">{</font></span>param.<span class="me1"><font color="#006600">name</font></span><span class="br0"><font color="#66cc66">}</font></span></pre>
<p>使用Ajax的真正挑战，是需要进行适当的手工编码，并相应格式化为服务端可用接受的数据结构。有几种格式供人们选择（最常用为JSON/XML)。 Ext没有跟任何服务器语言有独家联系，因此其它特定语言的库亦可用于Ext处理Ajax服务。只要页面接受到结果是EXT能处理的数据格式，Ext绝不会干涉服务器其他的事情！推荐参阅我们提供的<a class="external text" title="http://extjs.com/learn/Manual:Resources#Platform-Specific_Resources" href="http://extjs.com/learn/Manual:Resources#Platform-Specific_Resources" rel="nofollow">各个平台资源</a>以了解服务端框架的更多资讯和辅助。</p>
</span></span>
<img src ="http://www.blogjava.net/Crying/aggbug/201079.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Crying/" target="_blank">Crying</a> 2008-05-17 13:16 <a href="http://www.blogjava.net/Crying/articles/201079.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>EXT2.0 做的登陆界面  </title><link>http://www.blogjava.net/Crying/articles/200745.html</link><dc:creator>Crying</dc:creator><author>Crying</author><pubDate>Thu, 15 May 2008 15:12:00 GMT</pubDate><guid>http://www.blogjava.net/Crying/articles/200745.html</guid><wfw:comment>http://www.blogjava.net/Crying/comments/200745.html</wfw:comment><comments>http://www.blogjava.net/Crying/articles/200745.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Crying/comments/commentRss/200745.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Crying/services/trackbacks/200745.html</trackback:ping><description><![CDATA[<p><span style="color: #000000">2008年5月15日&nbsp;<br />
效果如图 ：<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <img alt="" src="http://www.blogjava.net/images/blogjava_net/crying/27507/o_lgion.jpg" border="0" /><br />
<br />
以下是代码：<br />
<br />
login.js&nbsp; 代码如下：</span></p>
<p><span style="color: #000000">&nbsp;</span></p>
<p><span style="color: #000000">LoginPanel = function() {<br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp; var win, f;<br />
&nbsp;&nbsp;&nbsp; var buildForm = function() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 构建一个表单面板容器<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; f = new Ext.form.FormPanel( {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 给面板的body元素指定自定义的CSS样式信息<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bodyStyle : 'padding-top:6px',<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 容器中元素的默认类型<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; defaultType : 'textfield',<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 标签的默认对齐方式<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; labelAlign : 'right',<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 指定标签的默认长度<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; labelWidth : 55,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 标签与字段录入框之间的空白<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; labelPad : 0,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 窗口是否显示背景色<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; frame : true,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 容器中组件默认统一配置选项<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; defaults : {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 验证字段是否能为空<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; allowBlank : false,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 字段宽度<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; width : 158<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; },<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 指定容器中的元素<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; items : [ {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 给元素添加CSS样式<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cls : 'user',<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 元素的名称<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; name : 'name',<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 指定字段的标签<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fieldLabel : '帐号',<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 为空时提示信息<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; blankText : '帐号不能为空'<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }, {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cls : 'key',<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; name : 'pws',<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fieldLabel : '密码',<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; blankText : '密码不能为空',<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; inputType : 'password'<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; },{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><font color="#ffff00"><span style="color: #000000"><font color="#ffff00"><span style="color: #000000"><font color="#ffff00"><span style="color: #000000">&nbsp;</span><span style="color: #000000">name: 'validateCode',<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fieldLabel: '验证码',<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; maxLength: 4,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; width: 100,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; style: 'font-size:14px;font-weight:bold;letter-spacing: 1px; background:url(<font color="#0000ff">validateCode.jsp</font>); background-repeat: no-repeat; background-position: 40px 1px;center right no-repeat;',&nbsp;&nbsp;//<font color="#0000ff">validateCode.jsp 是产生验证码的图片的JSP页面</font><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; allowBlank:false,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; blankText:'验证码不能为空!'<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></font><span style="color: #000000">]<br />
</span></span></font></span></font><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; });<br />
&nbsp;&nbsp;&nbsp; };<br />
&nbsp;&nbsp;&nbsp; var buildWin = function() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 构建一个窗口面板容器<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; win = new Ext.Window( {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 把该面板绑定于wins这个DIV对象上<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; el : 'wins',<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 窗口面板标题<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; title : '登陆系统',<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 窗口面板宽度<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; width : 265,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 高度<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; height : 165,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 该面板布局类型<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; layout : 'column',<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 面板是否可以关闭及打开<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; collapsible : true,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //窗体拖拽 默认是TRUE<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; draggable: false,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; defaults : {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 容器内元素是否显示边框<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; border : false<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; },<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; items : {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 指定内部元素所占宽度1表示100% .5表示50%<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; columnWidth : 1,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 把表单面板容器增加入其中,使之成为窗口面板容器的子容器<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; items : f<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; },<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 面板中按钮的排列方式<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; buttonAlign : 'left',<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 面板底部的一个或多个按钮对象<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; buttons : [ {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 按钮上需显示的文本<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; text : '登陆',<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 单击按钮时响应的动作<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; handler : login<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }, {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; text : '重置',<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; handler : reset<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }, {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; text : '注册',<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; handler : link<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }]<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; });<br />
&nbsp;&nbsp;&nbsp; };<br />
&nbsp;&nbsp;&nbsp; // 单击按钮时执行登陆操作<br />
&nbsp;&nbsp;&nbsp; var login = function(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #ff0000">if(f.form.isValid()){//验证合法后使用加载进度条<br />
</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 执行当前表单面板的submit<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; f.form.submit( {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 动作发生期间显示的文本信息<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; waitMsg : '正在登陆验证,请稍后...',<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // submit发生时指向的地址<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; url : 'test.jsp',<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //发送参数<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // params:'{name='+f.name+'pws='+f.pws+'}',<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 表单提交方式<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; method : 'POST',<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 数据验证通过时发生的动作<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; success : function(form, action) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(<span style="color: #ff0000">action.result.msg=='ok'</span>){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; window.location.href = 'MyJsp.jsp';<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; },<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 反之<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; failure : function(form, action) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; reset();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (action.failureType == Ext.form.Action.SERVER_INVALID)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Ext.MessageBox.alert('登陆失败', <span style="color: #ff0000">action.result.errors.crying</span>);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; });<br />
&nbsp;&nbsp;&nbsp; }};<br />
&nbsp;&nbsp;&nbsp; // 清空当前表单面板内的数据<br />
&nbsp;&nbsp;&nbsp; var reset = function() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; f.form.reset();<br />
&nbsp;&nbsp;&nbsp; };<br />
&nbsp;&nbsp;&nbsp; // 注册按钮指向的地址<br />
&nbsp;&nbsp;&nbsp; var link = function() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; window.open('reg.jsp', '_blank')<br />
&nbsp;&nbsp;&nbsp; };<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; return {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; init : function() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;//使用表单提示<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Ext.QuickTips.init();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Ext.form.Field.prototype.msgTarget = 'side';<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; buildForm();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; buildWin();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 最后把窗口面板显示出来<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; win.show();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; }<br />
}();<br />
// 当当前页面DOM加载完毕后,在LoginPanel作用域内执行LoginPanel.init.<br />
Ext.onReady(LoginPanel.init, LoginPanel);</span></p>
<p><span style="color: #000000">&nbsp;--------------------------------------------------------------------------</span></p>
<p><span style="color: #000000">login.jsp如下：</span></p>
<p><span style="color: #000000">&lt;%@ page language="java"&nbsp; pageEncoding="UTF-8" contentType="text/html; charset=UTF-8"%&gt;<br />
&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"&gt;<br />
&lt;html&gt;<br />
&nbsp; &lt;head&gt;<br />
&nbsp; &lt;link rel="stylesheet" type="text/css" href="ext/resources/css/ext-all.css" /&gt; <br />
&nbsp; &lt;style type="text/css"&gt;<br />
&nbsp; #loading-mask{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; position:absolute;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; left:0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; top:0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; width:100%;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; height:100%;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; z-index:20000;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; background-color:white;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; #loading{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; position:absolute;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; left:45%;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; top:40%;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; padding:2px;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; z-index:20001;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; height:auto;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; #loading .loading-indicator{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; background:white;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; color:#444;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; font:bold 20px tahoma,arial,helvetica;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; padding:10px;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; margin:0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; height:auto;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; #loading-msg {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; font: normal 18px arial,tahoma,sans-serif;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp; &lt;/style&gt;<br />
&nbsp; &lt;/head&gt;<br />
&nbsp; &lt;body&gt;<br />
&lt;!-- 加载效果 --&gt;<br />
&lt;div id='loading-mask'&gt;&lt;/div&gt;<br />
&lt;div id="loading"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;div class="loading-indicator"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;img src="ext/resources/images/default/shared/large-loading.gif" width="32" height="32" style="margin-right:8px;float:left;vertical-align:top;"/&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;br/&gt;&lt;span id="loading-msg"&gt;Loading ...&lt;/span&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/div&gt;<br />
&lt;/div&gt;<br />
&nbsp; &lt;!-- 加载类库 --&gt;<br />
&nbsp; &lt;script type="text/javascript" src="ext/adapter/ext/ext-base.js"&gt;&lt;/script&gt;<br />
&nbsp; &lt;script type="text/javascript" src="ext/ext-all.js"&gt;&lt;/script&gt;<br />
&nbsp; &lt;script type="text/javascript" src="login2.js"&gt;&lt;/script&gt;<br />
&nbsp; &lt;!-- 退去加载效果 --&gt;<br />
&nbsp; &lt;script type="text/javascript"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; Ext.get('loading').setOpacity(0.0,{duration:1.0,callback:function(){this.hide();}});<br />
&nbsp;&nbsp;&nbsp;&nbsp; Ext.get('loading-mask').setOpacity(0.0,{duration:1.0,callback:function(){this.hide();}});<br />
&nbsp; &lt;/script&gt;<br />
&nbsp;&nbsp; &lt;!-- 登陆界面 --&gt;&nbsp; <br />
&nbsp;&lt;div id='wins'&gt;&lt;/div&gt;<br />
&nbsp;&lt;!--&nbsp; --&gt;<br />
&nbsp;&lt;/body&gt;<br />
&lt;/html&gt;<br />
</span></p>
<p>---------------------------------------------------------------------------<span style="color: #000000"></p>
<p><span style="color: #000000">后台测试 页面 test.jsp 如下：</span></p>
<p><span style="color: #000000">&lt;%@ page language="java" pageEncoding="UTF-8" %&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;%<br />
&nbsp;&nbsp;&nbsp; String name=request.getParameter("name");<br />
&nbsp;&nbsp;&nbsp; String pws=request.getParameter("pws");<br />
&nbsp;&nbsp;&nbsp;&nbsp; String validateCode=request.getParameter("validateCode");//验证码<br />
&nbsp;&nbsp;&nbsp; System.out.println(name+"&nbsp; "+ pws+"&nbsp; "+validateCode+"&nbsp; "+session.getAttribute("rand")); <br />
&nbsp;&nbsp;&nbsp; if("crying".equals(name)&amp;&amp;"123".equals(pws)&amp;&amp;session.getAttribute("rand").equals(validateCode)){<br />
&nbsp;&nbsp;&nbsp;&nbsp; out.println( "{<span style="color: #ff0000">success: true,msg:\'ok\'</span>}");<br />
&nbsp;&nbsp;&nbsp; }else if(!session.getAttribute("rand").equals(validateCode)){<br />
&nbsp;&nbsp;&nbsp; out.println("{ <span style="color: #ff0000">success: false, </span><span style="color: #ff0000">errors: { crying:</span> \'验证码不正确！\'}}");<br />
&nbsp;&nbsp;&nbsp; }else{<br />
&nbsp;&nbsp;&nbsp;&nbsp; out.println("{ success: false, errors: { crying: \'用户帐号或密码不正确！\'}}");<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp; %&gt;<br />
</span></p>
<p><br />
----------------------------------------------<br />
产生验证码图片 validateCode.jsp 如下：</span></p>
<p><span style="color: #000000">&nbsp;&lt;%@ page language="java" import="java.awt.*,java.awt.image.*,java.util.*,javax.imageio.*" <br />
&nbsp;&nbsp;&nbsp;&nbsp; contentType="image/jpeg" pageEncoding="UTF-8"%&gt;</span></p>
<p><br />
<span style="color: #000000">&lt;%&nbsp; //设置页面不缓存<br />
&nbsp;&nbsp; response.setHeader("Pragma","No-cache");<br />
&nbsp;&nbsp; response.setHeader("Cahce-Control","no-cache");<br />
&nbsp;&nbsp; response.setDateHeader("Expires",0);<br />
&nbsp;&nbsp; //在内存中创建图片<br />
&nbsp;&nbsp; int width=60,height=20;<br />
&nbsp;&nbsp; BufferedImage image=new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);<br />
&nbsp;&nbsp; //获取图形上下文<br />
&nbsp;&nbsp; Graphics g= image.getGraphics();<br />
&nbsp;&nbsp; //生成随机类<br />
&nbsp;&nbsp; Random random= new Random();<br />
&nbsp;&nbsp; //设置背景颜色<br />
&nbsp;&nbsp; g.setColor(new Color(160,200,100));<br />
&nbsp;&nbsp; g.fillRect(0,0,width,height);<br />
&nbsp;&nbsp; //设置字体<br />
&nbsp;&nbsp; g.setFont(new Font("Times New Roman",Font.PLAIN,18));<br />
&nbsp;&nbsp; //随机产生50条干扰线，使图形中的验证码不易被其他的程序探测到<br />
&nbsp;&nbsp;&nbsp; g.setColor(new Color(160,200,200));<br />
&nbsp;&nbsp; for(int i=0;i&lt;50;i++)<br />
&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp; int x=random.nextInt(width);<br />
&nbsp;&nbsp;&nbsp;&nbsp; int y=random.nextInt(height);<br />
&nbsp;&nbsp;&nbsp;&nbsp; int x1=random.nextInt(width);<br />
&nbsp;&nbsp;&nbsp;&nbsp; int y1=random.nextInt(height);<br />
&nbsp;&nbsp;&nbsp;&nbsp; g.drawLine(x,y,x+x1,y+y1);<br />
&nbsp;&nbsp; }<br />
&nbsp;&nbsp; //随机产生验证码（4为数字）<br />
&nbsp;&nbsp; String sRand="";<br />
&nbsp;&nbsp; for(int i=0;i&lt;4;i++)<br />
&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp; String rand=String.valueOf(random.nextInt(10));<br />
&nbsp;&nbsp;&nbsp;&nbsp; sRand+=rand;<br />
&nbsp;&nbsp;&nbsp;&nbsp; //将验证码显示到图象<br />
&nbsp;&nbsp;&nbsp;&nbsp; g.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110)));<br />
&nbsp;&nbsp;&nbsp;&nbsp; g.drawString(rand,13*i+6,16);<br />
&nbsp;&nbsp; }<br />
&nbsp;&nbsp; session.setAttribute("rand",sRand);&nbsp; //////将产生的验证码存储到sesson中<br />
&nbsp;&nbsp; g.dispose();<br />
&nbsp;&nbsp; ImageIO.write(image,"JPEG",response.getOutputStream());<br />
&nbsp;&nbsp; out.clear(); //***********<br />
&nbsp;&nbsp; out=pageContext.pushBody();//**********<br />
&nbsp;%&gt;</span></p>
<p><span style="color: #000000">&nbsp;</span></p>
<p><span style="color: #000000"><br />
</span>&nbsp;</p>
<img src ="http://www.blogjava.net/Crying/aggbug/200745.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Crying/" target="_blank">Crying</a> 2008-05-15 23:12 <a href="http://www.blogjava.net/Crying/articles/200745.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>EXT 树</title><link>http://www.blogjava.net/Crying/articles/200492.html</link><dc:creator>Crying</dc:creator><author>Crying</author><pubDate>Wed, 14 May 2008 13:48:00 GMT</pubDate><guid>http://www.blogjava.net/Crying/articles/200492.html</guid><wfw:comment>http://www.blogjava.net/Crying/comments/200492.html</wfw:comment><comments>http://www.blogjava.net/Crying/articles/200492.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Crying/comments/commentRss/200492.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Crying/services/trackbacks/200492.html</trackback:ping><description><![CDATA[<span style="color: #000000">&nbsp;&nbsp;&nbsp; <br />
<span style="color: #808000">最近项目做完了 没事 就来学习学习EXT JS&nbsp;&nbsp; ，不过 大部分代码是从网上copy 过来 学习的 <br />
<br />
我最先学会的就是建树了 ，EXT JS 很强大 ，不过看的我头也大了，能建个树我就很高兴了，以后基础知识慢慢学习吧 ，最主要是能看见效果出来<br />
</span><br />
先建个tree.jsp内容如下：<br />
&nbsp;<br />
&lt;%@ page language="java"&nbsp; pageEncoding="UTF-8" contentType="text/html; charset=UTF-8"%&gt;<br />
&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"&gt;<br />
&lt;html&gt;<br />
&nbsp; &lt;head&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;title&gt;My JSP 'tree.jsp' starting page&lt;/title&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;!-- ext类库 --&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;script type="text/javascript" src="../ext/adapter/ext/ext-base.js"&gt;&lt;/script&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;script type="text/javascript" src="../ext/ext-all-debug.js"&gt;&lt;/script&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;!-- 本页的功能代码 --&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;script type="text/javascript" src="tree.js"&gt;&lt;/script&gt;<br />
&nbsp;&lt;link rel="stylesheet" type="text/css" href="../ext/resources/css/ext-all.css"&gt;<br />
&nbsp;<br />
&nbsp; &lt;/head&gt;<br />
&nbsp; &lt;body&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;!--&nbsp;要有一定高度 EXT 2.0已经改了 不然看不见的&nbsp; --&gt;<br />
&nbsp;<span style="color: #808000">&lt;div id="tree" style="overflow:auto; height:100%;width:250px;border:5px solid #c3daf9;"&gt;&lt;/div&gt;&nbsp;<br />
</span>&nbsp; &lt;/body&gt;<br />
&lt;/html&gt;<br />
<br />
tree.js的内容如下：<br />
Ext.onReady(function(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*<br />
&nbsp;var tree = new Ext.tree.TreePanel({<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;el:'tree',&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: red">&nbsp;//绑定&nbsp;页面上的&lt;div id='tree'&gt;因为树要在这里显示<br />
</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; useArrows:true,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: red">&nbsp;//文件夹前显示的图标改变了不在是+号了<br />
</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; autoScroll:true,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: red">//True to use overflow:'auto' on the panel's body element&nbsp;</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; animate:true,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<span style="color: red">//开启动画效果</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; enableDD:true,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: red">//实现拖拽<br />
</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;<span style="color: red">//是否显示跟节点</span> rootVisible:false,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;containerScroll: true,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: red">//利用Ext.tree.TreeLoader和后台进行数据交换(ajax) ，这里用了一个记事本做的名字叫tree.txt<br />
</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;loader: new Ext.tree.TreeLoader({dataUrl: 'tree.txt'})<br />
&nbsp;&nbsp;});<br />
&nbsp;&nbsp;<span style="color: red">//TreeNode是不支持ajax的，我们需要把根节点换成&nbsp;&nbsp;AsyncTreeNode(可以动态的加载数据)<br />
</span>&nbsp;&nbsp; var root = new Ext.tree.AsyncTreeNode({text:'偶是根'});&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;tree.setRootNode(root<span style="color: red">);//将树的根节点放到树的面板中<br />
</span>&nbsp;&nbsp;&nbsp; tree.render();&nbsp;<span style="color: red">&nbsp;//&nbsp;开始对树进行&nbsp; 渲染<br />
</span>&nbsp;&nbsp;&nbsp; root.expand();//<br />
&nbsp;<br />
&nbsp;*/<br />
&nbsp;<br />
&nbsp;
<p>&nbsp;&nbsp;&nbsp;&nbsp; var Tree = Ext.tree;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var root=new Tree.TreeNode({<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; id:'0',<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; text:'Root',<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; draggable:false <span style="color: red">//不允许拖拽<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //icon:'im2.gif',//自定义节点图标<br />
<br />
</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; });<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var node1=new Tree.TreeNode({id:'1',text:'node1'});<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var node2=new Tree.TreeNode({id:'2',text:'node2'});<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: red">//搞个有超链接的叶子&nbsp;&nbsp; // hrefTarget:'_blank'&nbsp;&nbsp; 新窗口打开链接<br />
</span>&nbsp;&nbsp;&nbsp;&nbsp; var node11=new Tree.TreeNode({id:'11',href:'test.jsp',text:'<span style="color: #0000ff">右键单击我'</span>,leaf:true});&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp; node1.appendChild(node11<span style="color: red">);//添加一个叶子<br />
</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var node21=new Tree.TreeNode({id:'21',text:'<span style="color: #0000ff">请左击我'</span>,leaf:true});<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var node22=new Tree.TreeNode({id:'22',text:'node22',leaf:true});<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var node4=new Tree.AsyncTreeNode({<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; id:'4',<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; text:'node4',<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; leaf:false,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: red">loader:new Tree.TreeLoader({dataUrl:'tree.txt'})});<br />
</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; node2.appendChild([node21,node22]);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; root.appendChild([node1,node2,node4]);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var treePanel=new Tree.TreePanel({<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; el:'tree',<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; useArrows:true,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; autoScroll:true,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; animate:true,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; enableDD:true,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //是否显示跟节点 rootVisible:false,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; containerScroll: true});<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; treePanel.setRootNode(root);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; treePanel.render();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; root.expand();<br />
</p>
<p><br />
<br />
<br />
<br />
&nbsp;&nbsp; //-----------------<span style="color: #0000ff">其他对我来说牛逼的效果-----------------------------//</span><br />
</p>
<p>&nbsp;&nbsp; //增加点击事件</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; node21.on('click',function(node){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert('我是："'+node.text+'"，我的id是："'+node.id+'"');//这里增加你所需要的点击事件<br />
&nbsp;&nbsp;&nbsp;&nbsp; });</p>
<p>//定义右键菜单<br />
&nbsp;&nbsp;&nbsp;&nbsp; var rightClick = new Ext.menu.Menu({<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; id :'rightClickCont',<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; items : [{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; id:'rMenu1',<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; text : '菜单1',<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: red">&nbsp;//增加菜单点击事件<br />
</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; handler:function (){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert('TMD点我干嘛！');<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }, {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; id:'rMenu2',<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; text : '菜单2',<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: red">&nbsp;&nbsp; //增加链接<br />
</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;href:'xx.jsp'<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }, {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; id:'rMenu3',<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; text : '菜单3'<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }]<br />
&nbsp;&nbsp;&nbsp;&nbsp; });</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; //增加右键点击事件<br />
&nbsp;&nbsp;&nbsp;&nbsp; node11.on('contextmenu',function(node,event){//声明菜单类型<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; event.preventDefault();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rightClick.showAt(event.getXY());//取得鼠标点击坐标，展示菜单<br />
&nbsp;&nbsp;&nbsp;&nbsp; });&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p>&nbsp;</p>
<p><br />
<br />
});</p>
<p>&nbsp;&nbsp;&nbsp;<br />
&nbsp;下面是 tree.txt的内容<br />
[<br />
&nbsp;&nbsp;&nbsp; {text:'01',children:[<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {text:'01-01叶子',href:'test.jsp',leaf:true},<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {text:'01-02',children:[<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {text:'01-02-01叶子',leaf:true},<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {text:'01-02-02叶子',leaf:true}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ]},<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {text:'01-03叶子',leaf:true}<br />
&nbsp;&nbsp;&nbsp; ]},<br />
&nbsp;&nbsp;&nbsp; {text:'02叶子',leaf:true}<br />
]<br />
</p>
<br />
<br />
下面就是显示的结果 <br />
<br />
<img alt="" src="http://www.blogjava.net/images/blogjava_net/crying/tree1.jpg" border="0" /><br />
<br />
<br />
<br />
<br />
<br />
<br />
</span>
<img src ="http://www.blogjava.net/Crying/aggbug/200492.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Crying/" target="_blank">Crying</a> 2008-05-14 21:48 <a href="http://www.blogjava.net/Crying/articles/200492.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>EXT 插件</title><link>http://www.blogjava.net/Crying/articles/200023.html</link><dc:creator>Crying</dc:creator><author>Crying</author><pubDate>Mon, 12 May 2008 07:14:00 GMT</pubDate><guid>http://www.blogjava.net/Crying/articles/200023.html</guid><wfw:comment>http://www.blogjava.net/Crying/comments/200023.html</wfw:comment><comments>http://www.blogjava.net/Crying/articles/200023.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Crying/comments/commentRss/200023.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Crying/services/trackbacks/200023.html</trackback:ping><description><![CDATA[<span style="color: #ffff00">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #0000ff">转载 ：<a href="http://www.javaeye.com/topic/161161">http://www.javaeye.com/topic/161161</a><br />
</span></span><br />
<br />
&nbsp;Ext 2.0的API包含许多的方法（函数）、属性和配置项，涵盖的面非常大，要全部列出几乎是不可能的。虽然<a href="http://extjs.com/deploy/dev/docs/" target="_blank">API文档</a>是童叟无欺精心打造的，但实际开发中，若果能够像其它语言Java和C#那样地支持JavaScript代码提示，那就更好啦。可喜的是，有若干的开发环境（IDE）和插件能够支持－－并且是直接支持Ext 2.0。<br />
<br />
&nbsp; &nbsp; <strong>Aptana Studio</strong><br />
&nbsp; &nbsp; 一谈到JavaScript的开发工具，就不得不提<a href="http://aptana.com/studio/" target="_blank">Aptana</a>了。就我实际工作来说，每天都用它来完成Adobe AIR的工作。但是Aptana当前捆绑的Ext的版本有些旧（1.1的），下面就介绍一个<a href="http://orsox.mocis.at/download.php?view.1" target="_blank">插件</a>的安装方法，让Aptana支持到2.0（由Markus Schmidleitner提供，用起来还不错）：
<blockquote>1.下载并安装Aptana Studio;<br />
2.打开你的Aptana程序目录（我这儿是C:\Aptana），复制jar格式的文件到plugins目录；<br />
3.重启Aptana；<br />
4.进入Window -&gt; Preferences -&gt; Aptana -&gt; Editors -&gt; JavaScript -&gt; Code Assist选择Ext 2.0（或要反选Ext.1.1）。</blockquote>
<p><br />
<img alt="" src="http://extjs.com/playpen/screenshots/codeassist/aptana.gif" border="0" _counted="undefined" /></p>
<p align="center"><span style="font-size: 10px">Aptana Studio with Ext 2.0 code assist</span></p>
<br />
<strong>Spket Eclipse插件与IDE</strong><br />
&nbsp; &nbsp; <a href="http://www.spket.com/" target="_blank">Spket IDE</a>是目前支持Ext 2.0最为出色的IDE。 它采用.jsb project file 文件并将继承于基类和所有文档的内容嵌入到生成代码提示的Script doc中。<br />
&nbsp; &nbsp; 由于Spket只是一个单纯的编辑器，没有其它格式的支持（如CSS），所以我的做法是用它的Eclipse插件形式，安装到Aptana。安装办法如下：<br />
<blockquote>&nbsp; &nbsp; 1.下载安装Aptana Studio（包含有Eclipse）；<br />
&nbsp; &nbsp; 2.启动Aptana并打开程序菜单到：Help &#8594; Software Updates &#8594; Find and Install&#8230; &#8594; Search for new features to install &#8594; New remote site&#8230; <br />
&nbsp; &nbsp; 3.名称: &#8220;Spket&#8221;，地址URL是<a href="http://www.spket.com/update/" target="_blank">http://www.spket.com/update/</a> <br />
&nbsp; &nbsp; 4.重启Aptana；<br />
&nbsp; &nbsp; 5.观看一下这个SketIDE的<a href="http://www.spket.com/demos/js.html" target="_blank">教程</a>，看看Ext代码提示的功能有多省事（你可以修改/src/ext.jsb 保持最新版的Ext），基本步骤如下：<br />
<ol>
    <li>Window &#8594; Preferences &#8594; Spket &#8594; JavaScript Profiles &#8594; New ；
    <li>输入&#8220;ExtJS&#8221;点击OK；
    <li>选择&#8220;ExtJS&#8221; 并点击&#8220;Add Library&#8221;然后在下拉条中选取&#8220;ExtJS&#8221;；
    <li>选择 &#8220;ExtJS&#8221;并点击&#8220;Add File&#8221;，然后在你的./ext-2.x/source目录中选取&#8220;ext.jsb&#8221; 文件；
    <li>设置新的ExtJS Profile，选中并点击&#8220;JavaScript Profiles&#8221; 对话框右手边的&#8220;Defalut&#8221;按钮；
    <li>重启Aptana；
    <li>创建新的JS文件并输入： Ext这样就可设置Ext Code代码自动完成的功能。 </li>
</ol>
</blockquote><br />
&nbsp; &nbsp; 由于你是在Aptana中安装插件的，Aptana还是你默认的JS编辑器，所以要试用Spket，你要在那个文件上选中&#8220;Open with&#8221;－&gt; Spket JavaScript Editor 。<br />
<br />
<img alt="" src="http://extjs.com/playpen/screenshots/codeassist/spket.gif" border="0" _counted="undefined" />&nbsp;<br />
<p align="center"><span style="font-size: 10px"><br />
<br />
<br />
<br />
<br />
</span>&nbsp;</p>
<span style="color: red">http://addons.mozilla.org/firefox/addon/1843</span>&nbsp;&nbsp;&nbsp; firbug
<img src ="http://www.blogjava.net/Crying/aggbug/200023.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Crying/" target="_blank">Crying</a> 2008-05-12 15:14 <a href="http://www.blogjava.net/Crying/articles/200023.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>学习学习</title><link>http://www.blogjava.net/Crying/articles/199156.html</link><dc:creator>Crying</dc:creator><author>Crying</author><pubDate>Thu, 08 May 2008 02:24:00 GMT</pubDate><guid>http://www.blogjava.net/Crying/articles/199156.html</guid><wfw:comment>http://www.blogjava.net/Crying/comments/199156.html</wfw:comment><comments>http://www.blogjava.net/Crying/articles/199156.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Crying/comments/commentRss/199156.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Crying/services/trackbacks/199156.html</trackback:ping><description><![CDATA[<h2 class="r">&nbsp;官网 </h2>
<h2 class="r"><a href="http://extjs.com/forum/showthread.php?t=3613">http://extjs.com/forum/showthread.php?t=3613</a>&nbsp;&nbsp;</h2>
<p class="r">文档中心 <br />
&nbsp;<a href="http://www.jackytsu.com/extcn/docs/">http://www.jackytsu.com/extcn/docs/</a><br />
http://www.ajaxjs.com/<br />
&nbsp; <br />
EXT实用简明教程<br />
<a href="http://www.easyjf.com/blog/html/20080217/1179671.html">http://www.easyjf.com/blog/html/20080217/1179671.html</a><br />
<br />
EXT实战<br />
<a href="http://www.extshow.com/">http://www.extshow.com/</a><br />
</p>
<h2 class="r"><a class="l" onmousedown="return clk(0,'','','res','4','')" href="http://wz.csdn.net/tag/ext/" target="_blank"><font color="#cc0033"><br />
ext</font> / <font color="#cc0033">网</font>摘列表</a></h2>
&nbsp;&nbsp;&nbsp; <a href="http://wz.csdn.net/tag/ext/">http://wz.csdn.net/tag/ext/</a><br />
<br />
关于ext.grids常见问题<br />
&nbsp;<a href=" http://www.dojochina.com/?q=node/655">http://www.dojochina.com/?q=node/655</a><br />
<br />
<br />
ext的一些学习网站<br />
&nbsp;<a href="http://hi.baidu.com/cowskin/blog/item/4ba48918df0eb6b64bedbc51.html">http://hi.baidu.com/cowskin/blog/item/4ba48918df0eb6b64bedbc51.html</a><br />
<br />
<br />
<br />
EXT之家<br />
<a href="http://wddaffwdd.zhan.cn.yahoo.com/">http://wddaffwdd.zhan.cn.yahoo.com/</a><br />
<br />
<br />
<br />
我的EXT圈子<br />
&nbsp;<a href="http://ext.group.javaeye.com/">http://ext.group.javaeye.com/</a><br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
http://hi.baidu.com/zdz8207/blog/item/2b5c7889871709b60f2444b8.html<br />
http://extjs.com/learn/Tutorial:Basic_Login<br />
http://www.google.cn/search?complete=1&amp;hl=zh-CN&amp;newwindow=1&amp;q=ext%E7%99%BB%E5%BD%95&amp;revid=-1&amp;sa=X&amp;oi=revisions_inline&amp;resnum=0&amp;ct=broad-revision&amp;cd=2<br />
<p>&nbsp;</p>
<img src ="http://www.blogjava.net/Crying/aggbug/199156.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Crying/" target="_blank">Crying</a> 2008-05-08 10:24 <a href="http://www.blogjava.net/Crying/articles/199156.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>