﻿<?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-Sealyu-随笔分类-EXTJS</title><link>http://www.blogjava.net/sealyu/category/42744.html</link><description>--- The devil's in the Details</description><language>zh-cn</language><lastBuildDate>Wed, 09 Dec 2009 01:27:11 GMT</lastBuildDate><pubDate>Wed, 09 Dec 2009 01:27:11 GMT</pubDate><ttl>60</ttl><item><title> Ext FormPanel submit 提交与Ext.Ajax.request提交的区别（转）</title><link>http://www.blogjava.net/sealyu/archive/2009/12/06/304934.html</link><dc:creator>seal</dc:creator><author>seal</author><pubDate>Sun, 06 Dec 2009 12:17:00 GMT</pubDate><guid>http://www.blogjava.net/sealyu/archive/2009/12/06/304934.html</guid><wfw:comment>http://www.blogjava.net/sealyu/comments/304934.html</wfw:comment><comments>http://www.blogjava.net/sealyu/archive/2009/12/06/304934.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sealyu/comments/commentRss/304934.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sealyu/services/trackbacks/304934.html</trackback:ping><description><![CDATA[<div>
<div>前置：</div>
<div>后台成功返回字符串：{success:true,msg:'操作成功！'}</div>
<div>后台失败返回字符串：{success:false,errors:'操作失败！'}</div>
</div>
<div>当submi提交时，action不存在后台返回下图字符串：</div>
<div><img src="http://m305.mail.qq.com/cgi-bin/read_pic?sid=MzE1MDU2NjE0NTAyOTMyODIw10615238,zh_CN&amp;pid=ZC0000Ng9F1FhRTFi2949QLJtIGQ33" ow="565"  alt="" /></div>
<div>&nbsp;</div>
<div>下面所有的action不存在，是指url路径不存在</div>
<div>&nbsp;</div>
<div>FormPanel 提交代码如下：</div>
<div>var G = new Ext.form.FormPanel({})</div>
<div>&nbsp;</div>
<div>G.getForm().submit({//客户端的数据提交给服务器<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://m305.mail.qq.com/cgi-bin/read_note?noteid=_55&amp;opr=del&amp;encodetype=js&amp;sid=MzE1MDU2NjE0NTAyOTMyODIw10615238%2Czh_CN&amp;t=note_edit_show&amp;viewmode=&amp;s=&amp;from=&amp;noprevnext=1&amp;catid=133#" target="_blank"><u><font color="#1e5494">url:wayfoon.MMS.DataPage</font></u></a> +'/ext2Upload.action',&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //waitMsg:"正在提交表单数据，请稍候。。。。。。",&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&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;&nbsp;&nbsp;&nbsp;&nbsp; Ext.MessageBox.alert('警告', action.result.errors);&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; },&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; 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;&nbsp; Ext.MessageBox.alert('信息', action.result.msg);<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; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }); </div>
<div>根据后台json 字符串 success的值（ture/false）自动选择failure或者success，也可以捕捉前台错误（走failure流程），比如数据非法而被强制提交时，</div>
<div>后台字符串需要通过action.result 转成json 字符串，供我们按习惯的方法使用，</div>
<div>&nbsp;</div>
<div>对于后台异常处理，比如 action不存在，则无能为力，会出JavaScript错误，</div>
<div>错误处，ext-all.js的代码</div>
<div>this.decode = function(json) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //alert(json);<br />
&nbsp;&nbsp;return eval("(" + json + ")")<br />
&nbsp;}</div>
<div>原因是无法将上图（如图）的字符串转成json字符串，导致无法判断走哪个流程，而正常情况下，返回的是 {success:true,msg:'操作成功！'}或其他。</div>
<div>试了将上面代码使用try{}catch (){} 还是不能解决JavaScript错误，我们一般可以避免这种后台错误，如果非得解决的话，不知道有没有好的解决方法。</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>Ext.Ajax.request提交代码如下：</div>
<div>Ext.Ajax.request({<br />
&nbsp;&nbsp;&nbsp; <a href="http://m305.mail.qq.com/cgi-bin/read_note?noteid=_55&amp;opr=del&amp;encodetype=js&amp;sid=MzE1MDU2NjE0NTAyOTMyODIw10615238%2Czh_CN&amp;t=note_edit_show&amp;viewmode=&amp;s=&amp;from=&amp;noprevnext=1&amp;catid=133#" target="_blank"><u><font color="#1e5494">url:wayfoon.MMS.DataPage+'/cpSMS.action?action=submitSMS'</font></u></a>,<br />
&nbsp;&nbsp;&nbsp; method:'POST',<br />
&nbsp;&nbsp;&nbsp; params:'id='+id,<br />
&nbsp;&nbsp;&nbsp; success:function(form,action){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var obj = Ext.util.JSON.decode(form.responseText);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(obj.success==true)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Ext.Msg.alert('提示',obj.msg);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ds.reload();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //Ext.Msg.alert('提示',obj.errors);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Ext.Msg.alert('提示',obj.msg);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp; </div>
<div>&nbsp;&nbsp;&nbsp; },<br />
&nbsp;&nbsp;&nbsp; failure:function(form,action){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Ext.Msg.alert('警告','系统错误');<br />
&nbsp;&nbsp;&nbsp; }<br />
});</div>
<div>后台字符串通过Ext.util.JSON.decode 转成json字符串</div>
<div>不能自动根据json字符串success的值来选择流程 ，需要根据obj.success的值来判断走哪个流程</div>
<div>&nbsp;</div>
<div>该failure:可以捕捉系统异常，比如，数据未曾提交到后台或action 不存在，此时走failure 流程</div>
<div><br />
</div>
<img src ="http://www.blogjava.net/sealyu/aggbug/304934.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sealyu/" target="_blank">seal</a> 2009-12-06 20:17 <a href="http://www.blogjava.net/sealyu/archive/2009/12/06/304934.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Ext.MessageBox(转)</title><link>http://www.blogjava.net/sealyu/archive/2009/12/04/304821.html</link><dc:creator>seal</dc:creator><author>seal</author><pubDate>Fri, 04 Dec 2009 12:26:00 GMT</pubDate><guid>http://www.blogjava.net/sealyu/archive/2009/12/04/304821.html</guid><wfw:comment>http://www.blogjava.net/sealyu/comments/304821.html</wfw:comment><comments>http://www.blogjava.net/sealyu/archive/2009/12/04/304821.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sealyu/comments/commentRss/304821.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sealyu/services/trackbacks/304821.html</trackback:ping><description><![CDATA[<div>
<div>
<h3>一、提示框(Ext.MessageBox.alert&nbsp; 或&nbsp; Ext.Msg.alert)</h3>
<p style="padding-left: 60px;"><strong>alert</strong>(&nbsp;<code>String title</code>, <code>String msg</code>, <span title="Optional">[<code>Function fn</code>]</span>, <span title="Optional">[<code>Object scope</code>]</span>&nbsp;) :</p>
<p style="padding-left: 60px;">title:标题</p>
<p style="padding-left: 60px;">msg:显示内容</p>
<p style="padding-left: 60px;">fn:回调函数</p>
<p style="padding-left: 60px;">scope:作用域</p>
<div>
<div>
<div>Js代码 <a href="http://shen198623.javaeye.com/blog/232616" title="复制代码"><img src="http://shen198623.javaeye.com/images/icon_copy.gif" alt="复制代码" /></a></div>
</div>
<ol>
    <li>&lt;script&nbsp;type=<span style="color: #0000ff;">"text/javascript"&gt; &nbsp;&nbsp;</span></li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ext.onReady(&nbsp;<strong><span style="color: #7f0055;">function</span></strong>(){ &nbsp;&nbsp;</li>
    <li>&nbsp;&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: #0000ff;">'Alert'</span>,<span style="color: #0000ff;">'弹出窗口Alert'</span>,<strong><span style="color: #7f0055;">function</span></strong>(){alert(<span style="color: #0000ff;">'abc'</span>)});&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;); &nbsp;&nbsp;</li>
    <li>&lt;/script&gt;&nbsp;&nbsp;</li>
</ol>
</div>
<div>
<div>
<div>Js代码 <embed lk_media="yes" lk_mediaid="lk_juiceapp_mediaPopup_1259929454143" src="http://yxgyh.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" flashvars="clipboard=%3Cscript%20type%3D%22text%2Fjavascript%22%3E%0A%20%20%20%20%20%20%20%20Ext.onReady(%20function()%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Ext.MessageBox.alert('Alert'%2C'%E5%BC%B9%E5%87%BA%E7%AA%97%E5%8F%A3Alert'%2Cfunction()%7Balert('abc')%7D)%3B%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20)%3B%0A%3C%2Fscript%3E%0A" quality="high" allowscriptaccess="always" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" width="14" height="15"></div>
</div>
<ol start="1">
    <li>&lt;script&nbsp;type="text/javascript"&gt;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ext.onReady(&nbsp;function(){&nbsp;&nbsp;</li>
    <li>&nbsp;&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('Alert','弹出窗口Alert',function(){alert('abc')});&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;);&nbsp;&nbsp;</li>
    <li>&lt;/script&gt;&nbsp;&nbsp;</li>
</ol>
</div>
<pre style="display: none;" name="code" class="js">&lt;script type="text/javascript"&gt;
Ext.onReady( function(){
Ext.MessageBox.alert('Alert','弹出窗口Alert',function(){alert('abc')});
}
);
&lt;/script&gt;
</pre>
<h3>二、对话框(Ext.MessageBox.confirm&nbsp; 或&nbsp; Ext.Msg.confirm)</h3>
<p style="padding-left: 60px;"><strong>confirm</strong>(&nbsp;<code>String title</code>, <code>String msg</code>, <span title="Optional">[<code>Function fn</code>]</span>, <span title="Optional">[<code>Object scope</code>]</span>&nbsp;) </p>
<p style="padding-left: 60px;">title:标题</p>
<p style="padding-left: 60px;">msg:显示内容</p>
<p style="padding-left: 60px;">fn:回调函数</p>
<div>
<div>
<div>Js代码 <a href="http://shen198623.javaeye.com/blog/232616" title="复制代码"><img src="http://shen198623.javaeye.com/images/icon_copy.gif" alt="复制代码" /></a></div>
</div>
<ol>
    <li>&lt;script&nbsp;type=<span style="color: #0000ff;">"text/javascript"&gt; &nbsp;&nbsp;</span></li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;Ext.onReady(&nbsp;<strong><span style="color: #7f0055;">function</span></strong>(){ &nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ext.MessageBox.confirm(&nbsp;<span style="color: #0000ff;">"请确认"</span>,&nbsp;<span style="color: #0000ff;">"是否要删除指定内容"</span>,&nbsp;<strong><span style="color: #7f0055;">function</span></strong>(button,text){ &nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(button); &nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;); &nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;); &nbsp;&nbsp;</li>
    <li>&lt;/script&gt;&nbsp;&nbsp;</li>
</ol>
</div>
<div>
<div>
<div>Js代码 <embed lk_media="yes" lk_mediaid="lk_juiceapp_mediaPopup_1259929454158" src="http://yxgyh.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" flashvars="clipboard=%3Cscript%20type%3D%22text%2Fjavascript%22%3E%0A%09Ext.onReady(%20function()%7B%0A%09%09%09Ext.MessageBox.confirm(%20%22%E8%AF%B7%E7%A1%AE%E8%AE%A4%22%2C%20%22%E6%98%AF%E5%90%A6%E8%A6%81%E5%88%A0%E9%99%A4%E6%8C%87%E5%AE%9A%E5%86%85%E5%AE%B9%22%2C%20function(button%2Ctext)%7B%0A%09%09%09%09alert(button)%3B%0A%09%09%09%7D%20)%3B%0A%09%09%7D%0A%09)%3B%0A%3C%2Fscript%3E" quality="high" allowscriptaccess="always" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" width="14" height="15"></div>
</div>
<ol start="1">
    <li>&lt;script&nbsp;type="text/javascript"&gt;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;Ext.onReady(&nbsp;function(){&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ext.MessageBox.confirm(&nbsp;"请确认",&nbsp;"是否要删除指定内容",&nbsp;function(button,text){&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(button);&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;);&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;);&nbsp;&nbsp;</li>
    <li>&lt;/script&gt;&nbsp;&nbsp;</li>
</ol>
</div>
<pre style="display: none;" name="code" class="js">&lt;script type="text/javascript"&gt;
Ext.onReady( function(){
Ext.MessageBox.confirm( "请确认", "是否要删除指定内容", function(button,text){
alert(button);
} );
}
);
&lt;/script&gt;</pre>
<h3>三、对话框(Ext.MessageBox.prompt 或 Ext.Msg.prompt )</h3>
<p style="padding-left: 60px;"><strong>prompt</strong>(&nbsp;<code>String title</code>, <code>String msg</code>, <span title="Optional">[<code>Function fn</code>]</span>, <span title="Optional">[<code>Object scope</code>]</span>&nbsp;) </p>
<p style="padding-left: 60px;">title:标题</p>
<p style="padding-left: 60px;">msg:显示内容</p>
<p style="padding-left: 60px;">fn:回调函数</p>
<div>
<div>
<div>Js代码 <a href="http://shen198623.javaeye.com/blog/232616" title="复制代码"><img src="http://shen198623.javaeye.com/images/icon_copy.gif" alt="复制代码" /></a></div>
</div>
<ol>
    <li>&lt;script&nbsp;type=<span style="color: #0000ff;">"text/javascript"&gt; &nbsp;&nbsp;</span></li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;Ext.onReady(&nbsp;<strong><span style="color: #7f0055;">function</span></strong>(){ &nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ext.MessageBox.prompt(&nbsp;<span style="color: #0000ff;">"输入提示框"</span>,&nbsp;<span style="color: #0000ff;">"请输入您的年龄"</span>,&nbsp;<strong><span style="color: #7f0055;">function</span></strong>(button,text){ &nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(button); &nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(text); &nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;); &nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;); &nbsp;&nbsp;</li>
    <li>&lt;/script&gt;&nbsp;&nbsp;</li>
</ol>
</div>
<div>
<div>
<div>Js代码 <embed lk_media="yes" lk_mediaid="lk_juiceapp_mediaPopup_1259929454161" src="http://yxgyh.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" flashvars="clipboard=%3Cscript%20type%3D%22text%2Fjavascript%22%3E%0A%09Ext.onReady(%20function()%7B%0A%09%09%09Ext.MessageBox.prompt(%20%22%E8%BE%93%E5%85%A5%E6%8F%90%E7%A4%BA%E6%A1%86%22%2C%20%22%E8%AF%B7%E8%BE%93%E5%85%A5%E6%82%A8%E7%9A%84%E5%B9%B4%E9%BE%84%22%2C%20function(button%2Ctext)%7B%0A%09%09%09%09alert(button)%3B%0A%09%09%09%09alert(text)%3B%0A%09%09%09%7D%20)%3B%0A%09%09%7D%0A%09)%3B%0A%3C%2Fscript%3E" quality="high" allowscriptaccess="always" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" width="14" height="15"></div>
</div>
<ol start="1">
    <li>&lt;script&nbsp;type="text/javascript"&gt;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;Ext.onReady(&nbsp;function(){&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ext.MessageBox.prompt(&nbsp;"输入提示框",&nbsp;"请输入您的年龄",&nbsp;function(button,text){&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(button);&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(text);&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;);&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;);&nbsp;&nbsp;</li>
    <li>&lt;/script&gt;&nbsp;&nbsp;</li>
</ol>
</div>
<pre style="display: none;" name="code" class="js">&lt;script type="text/javascript"&gt;
Ext.onReady( function(){
Ext.MessageBox.prompt( "输入提示框", "请输入您的年龄", function(button,text){
alert(button);
alert(text);
} );
}
);
&lt;/script&gt;</pre>
<h3>四、对话框(Ext.MessageBox.show 或 Ext.MsgBox.show)</h3>
<div>
<div>
<div>Js代码 <a href="http://shen198623.javaeye.com/blog/232616" title="复制代码"><img src="http://shen198623.javaeye.com/images/icon_copy.gif" alt="复制代码" /></a></div>
</div>
<ol>
    <li>Ext.onReady(&nbsp;<strong><span style="color: #7f0055;">function</span></strong>(){ &nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;Ext.MessageBox.show(&nbsp;{ &nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;title:<span style="color: #0000ff;">"保存数据"</span>, &nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;msg:<span style="color: #0000ff;">"你已经作了一些数据修改，是否要保存当前内容的修改？"</span>, &nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;buttons:Ext.Msg.YESNOCANCEL, &nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fn:save, &nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;icon:Ext.MessageBox.QUESTION}); &nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</li>
    <li>);&nbsp;&nbsp;</li>
</ol>
</div>
<div>
<div>
<div>Js代码 <embed lk_media="yes" lk_mediaid="lk_juiceapp_mediaPopup_1259929454163" src="http://yxgyh.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" flashvars="clipboard=Ext.onReady(%20function()%7B%0A%09Ext.MessageBox.show(%20%7B%0A%09%09title%3A%22%E4%BF%9D%E5%AD%98%E6%95%B0%E6%8D%AE%22%2C%0A%09%09msg%3A%22%E4%BD%A0%E5%B7%B2%E7%BB%8F%E4%BD%9C%E4%BA%86%E4%B8%80%E4%BA%9B%E6%95%B0%E6%8D%AE%E4%BF%AE%E6%94%B9%EF%BC%8C%E6%98%AF%E5%90%A6%E8%A6%81%E4%BF%9D%E5%AD%98%E5%BD%93%E5%89%8D%E5%86%85%E5%AE%B9%E7%9A%84%E4%BF%AE%E6%94%B9%EF%BC%9F%22%2C%0A%09%09buttons%3AExt.Msg.YESNOCANCEL%2C%0A%09%09fn%3Asave%2C%0A%09%09icon%3AExt.MessageBox.QUESTION%7D)%3B%0A%09%7D%0A)%3B" quality="high" allowscriptaccess="always" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" width="14" height="15"></div>
</div>
<ol start="1">
    <li>Ext.onReady(&nbsp;function(){&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;Ext.MessageBox.show(&nbsp;{&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;title:"保存数据",&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;msg:"你已经作了一些数据修改，是否要保存当前内容的修改？",&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;buttons:Ext.Msg.YESNOCANCEL,&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fn:save,&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;icon:Ext.MessageBox.QUESTION});&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</li>
    <li>);&nbsp; <br />
    </li>
</ol>
</div>
<pre style="display: none;" name="code" class="js">Ext.onReady( function(){
Ext.MessageBox.show( {
title:"保存数据",
msg:"你已经作了一些数据修改，是否要保存当前内容的修改？",
buttons:Ext.Msg.YESNOCANCEL,
fn:save,
icon:Ext.MessageBox.QUESTION});
}
);</pre>
</div>
</div>
a
<p><strong>1.</strong><strong>Ext.MessageBox.alert()</strong>方法<br />
有四个参数：<span style="color: #ff0000;"><span style="color: #0000ff;"><strong>alert( <span style="text-decoration: underline;">title </span>, <span style="text-decoration: underline;">msg </span>, <span style="text-decoration: underline;">function(){} </span>，this)<br />
</strong></span> <span style="color: #000000;">其中title，msg为必选参数，function为可选参数，在关闭弹出窗口后触发,可以传入点击的按钮的id，第四个参数</span></span>scope:指回调函数作用域。</p>
<p>Ext.Msg.alert(&#8221;Notice&#8221;,&#8221;hello world!&#8221;);&nbsp; <span style="color: #339966;">//alert会阻塞程序的执行，而Ext版的alert是异步执行</span><br />
Ext.Msg.alert(&#8221;Notice&#8221;,&#8221;&lt;font color=red&gt;hello world!&lt;/font&gt;&#8221;); <span style="color: #339966;">//支持html格式</span><br />
Ext.Msg.alert(&#8221;Notice&#8221;,&#8221;&lt;font color=red&gt;hello world!&lt;/font&gt;&#8221;,<span style="color: #0000ff;">function</span> callback(id){alert(&#8217;您点的是&#8217;+id);});</p>
<p><strong>2.</strong><strong>Ext.MessageBox.confirm()</strong>方法</p>
<p>基本上同alert()方法一模一样。 注意这点：</p>
<div><span style="color: #000000;">Ext.MessageBox.confirm(</span><span style="color: #000000;">&#8220;</span><span style="color: #000000;">title</span><span style="color: #000000;">&#8220;</span><span style="color: #000000;">,</span><span style="color: #000000;">&#8220;</span><span style="color: #000000;">msg</span><span style="color: #000000;">&#8220;</span><span style="color: #000000;">,</span><span style="color: #0000ff;">function</span><span style="color: #000000;">(e){alert(e);});</span></div>
<p>这个参数e是什么？它是你点击的弹出框的按钮的值，三种值：yes,no,cancel. Alert()方法也是如此，不过只有两种值：ok，cancel.</p>
<p>回调函数可以传入一唯一参数：单击按钮的id，点击退出按钮也会触发此事件</p>
<p><strong>3.</strong><strong>Ext.MessageBox.<span style="font-family: Verdana;">prompt</span>()</strong>方法<br />
有五个参数，比前面alert方法多一个是否多行。</p>
<div><span style="color: #000000;">Ext.MessageBox.prompt(</span><span style="color: #000000;">&#8220;</span><span style="color: #000000;">title</span><span style="color: #000000;">&#8220;</span><span style="color: #000000;">,</span><span style="color: #000000;">&#8220;</span><span style="color: #000000;">msg</span><span style="color: #000000;">&#8220;</span><span style="color: #000000;">);</span></div>
<div>Ext.Msg.prompt(&#8217;Notice&#8217;,'请输入你的姓名：&#8217;,function callback(id,msg){alert(&#8217;单击的按钮ID：&#8217;+id+&#8217;"n您输入的姓名是：&#8217;+msg);},this,false);<span style="color: #000000;"><br />
</span><span style="color: #008000;">//</span><span style="color: #008000;">输入&#8221;javachen&#8221;,点击ok按钮，弹出</span>单击的按钮ID：<span style="color: #008000;">OK </span>您输入的姓名是：<span style="color: #008000;">javachen</span></div>
<div><span style="color: #000000;">Ext.MessageBox.prompt(</span><span style="color: #000000;">&#8220;</span><span style="color: #000000;">title</span><span style="color: #000000;">&#8220;</span><span style="color: #000000;">,</span><span style="color: #000000;">&#8220;</span><span style="color: #000000;">msg</span><span style="color: #000000;">&#8220;</span><span style="color: #000000;">,</span><span style="color: #0000ff;">function</span><span style="color: #000000;">(e,text){alert(e</span><span style="color: #000000;">+</span><span style="color: #000000;">&#8220;</span><span style="color: #000000;">-</span><span style="color: #000000;">&#8220;</span><span style="color: #000000;">+</span><span style="color: #000000;">text);},</span><span style="color: #0000ff;">this</span><span style="color: #000000;">,</span><span style="color: #0000ff;">true</span><span style="color: #000000;">);</span><span style="color: #008000;">//</span><span style="color: #008000;">true为多行，this表示作用域</span></div>
<div><strong>4.</strong><strong>Ext.MessageBox.show()</strong>方法<br />
功能很强大，采用config配置形式，比前面的方法使用更方便。 参数很多，在此列举最常用的配置参数：
<div><span style="color: #000000;">1</span><span style="color: #000000;">.animEl:对话框弹出和关闭时的动画效果，比如设置为&#8220;id1&#8221;，则从id1处弹出并产生动画，收缩则相反<br />
</span><span style="color: #000000;">2</span><span style="color: #000000;">.buttons:弹出框按钮的设置，主要有以下几种：Ext.Msg.OK,<br />
Ext.Msg.OKCANCEL,<br />
Ext.Msg.CANCEL,<br />
Ext.Msg.YESNO,<br />
Ext.Msg.YESNOCANCEL<br />
你也可以自定义按钮上面的字：{</span><span style="color: #000000;">&#8220;</span><span style="color: #000000;">ok</span><span style="color: #000000;">&#8220;</span><span style="color: #000000;">,</span><span style="color: #000000;">&#8220;</span><span style="color: #000000;">我本来是ok的</span><span style="color: #000000;">&#8220;</span><span style="color: #000000;">}。 若设为false，则不显示任何按钮.<br />
</span><span style="color: #000000;">3</span><span style="color: #000000;">.closable:如果为false，则不显示右上角的小叉叉，默认为true。<br />
</span><span style="color: #000000;">4</span><span style="color: #000000;">.msg:</span><span style="color: #000000;">&#8220;</span><span style="color: #000000;">消息的内容</span><span style="color: #000000;">&#8220;</span><span style="color: #000000;"><br />
</span><span style="color: #000000;">5</span><span style="color: #000000;">.title:</span><span style="color: #000000;">&#8220;</span><span style="color: #000000;">标题</span><span style="color: #000000;">&#8220;</span><span style="color: #000000;"><br />
</span><span style="color: #000000;">6</span><span style="color: #000000;">.fn:关闭弹出框后执行的函数<br />
</span><span style="color: #000000;">7</span><span style="color: #000000;">.icon：弹出框内容前面的图标，取值为Ext.MessageBox.INFO，<br />
Ext.MessageBox.ERROR,<br />
Ext.MessageBox.WARNING,<br />
Ext.MessageBox.QUESTION<br />
</span><span style="color: #000000;">8</span><span style="color: #000000;">.width:弹出框的宽度，不带单位<br />
</span><span style="color: #000000;">9</span><span style="color: #000000;">.prompt：设为true，则弹出框带有输入框<br />
</span><span style="color: #000000;">10</span><span style="color: #000000;">.multiline：设为true，则弹出框带有多行输入框<br />
</span><span style="color: #000000;">11</span><span style="color: #000000;">.progress:设为true，显示进度条，（但是是死的）<br />
</span><span style="color: #000000;">12</span><span style="color: #000000;">.progressText:显示在进度条上的字<br />
</span><span style="color: #000000;">13</span><span style="color: #000000;">.wait：设为true，动态显示progress<br />
</span><span style="color: #000000;">14</span><span style="color: #000000;">.waitConfig:配置参数，以控制显示progress</span></div>
<div style="padding-left: 30px;"><span style="color: #000000;"><span style="color: #ff0000;">例子：</span></span></div>
<div>Ext.Msg.show({<br />
title:&#8217;Notice&#8217;,<br />
msg:&#8217;请输入您的姓名！&#8217;,<br />
width:300,<br />
prompt:true,<br />
//multiline:true,<br />
//wait:true,<br />
//progress:true,<br />
//progressText:&#8217;progressing&#8217;,<br />
closable:true,<br />
modal:true,
<p>buttons:Ext.Msg.OKCANCEL,<br />
icon:Ext.Msg.INFO<br />
});</p>
</div>
<div><span style="color: #000000;"><br />
</span></div>
<div>
<div><strong><span style="color: #000000;">5.</span><span style="font-family: Verdana;">Ext.MessageBox.wait()</span></strong></div>
<div>参数 msg：显示信息&nbsp; title：标题 &nbsp;&nbsp;&nbsp; &nbsp;config：配置信息</div>
<div>例子：</div>
<div>Ext.Msg.wait(&#8217;请等待，操作正在进行中&#8217;,'Notice&#8217;);</div>
<div>Ext.Msg.wait(&#8217;请等待，操作正在进行中！&#8217;,'Notice&#8217;,<br />
{<br />
text:&#8217;processing&#8217;,<br />
duration:2700,&nbsp;&nbsp; <span style="color: #339966;">//进度条在被重置前运行的时间</span><br />
interval:300,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #339966;"> //进度条的时间间隔</span><br />
increment:10,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #339966;">//进度条的分段数量</span><br />
fn:function callback(){<br />
alert(&#8221;complete&#8221;);</div>
<div>}</div>
<div>});</div>
</div>
<div><strong><span style="color: #000000;">6.</span><span style="font-family: Verdana;">Ext.MessageBox.hide()</span></strong></div>
<div>
<div>把显示着的当前message box隐藏起来。<br />
参数: 无.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Returns:&nbsp;&nbsp; Ext.MessageBox</div>
</div>
<div><strong><span style="font-family: Verdana;">7.</span><span style="font-family: Verdana;"><span style="font-family: Verdana;">Ext.MessageBox.updateProgress（）</span></span></strong></div>
<div><span style="font-family: Verdana;"><span style="font-family: Verdana;"> Ext.MessageBox.updateProgress(value,&#8221;ProgressText&#8221;,&#8221;msg&#8221;)&nbsp; <span style="color: #008000;">//(三个参数，看名字就知道意思)，</span></span></span><span style="color: #008000;"> 注意value为0-1之间的数，表示进度条的进度.</span></div>
<div><strong><span style="color: #000000;"><br />
</span></strong></div>
<div><strong><span style="color: #000000;">8.修改默认的按钮文字</span></strong></div>
<div>Ext.Msg.buttonText={</div>
<div>yes:&#8217; yes&#8217;,</div>
<div>no:&#8217;no&#8217;,</div>
<div>ok:&#8217;ok&#8217;,<br />
cancel:&#8217;cancel&#8217;<br />
};</div>
<div>Ext.Msg.buttonText.yes=&#8217;Yes&#8217;;</div>
<div><strong><span style="color: #000000;">9.动态跟新提示框</span></strong></div>
<div><span style="color: #0000ff;">1)跟新提示文字</span></div>
<div>var msgBox = Ext.MessageBox.show({<br />
title:&#8217;提示&#8217;,<br />
msg:&#8217;动态跟新的信息文字&#8217;,<br />
modal:true,<br />
buttons:Ext.Msg.OK<br />
})<br />
<span style="color: #339966;">//Ext.TaskMgr是一个功能类，用来定时执行程序，</span><br />
<span style="color: #339966;">//在这里我们使用它来定时触发提示信息的更新。</span><br />
Ext.TaskMgr.start({<br />
run:function(){<br />
msgBox.updateText(&#8217;会动的时间：&#8217;+new Date().format(&#8217;Y-m-d g:i:s A&#8217;));<br />
},<br />
interval:1000<br />
});</div>
<div><span style="color: #0000ff;">2).跟新进度条及提示信息</span></div>
<div>var msgBox = Ext.MessageBox.show({<br />
title:&#8217;提示&#8217;,<br />
msg:&#8217;动态跟新的进度条和信息文字&#8217;,<br />
modal:true,<br />
width:300,<br />
progress:true<br />
})
<p>var count = 0;<span style="color: #339966;">//滚动条被刷新的次数</span><br />
var percentage = 0;<span style="color: #339966;">//进度百分比</span><br />
var progressText = &#8221;;<span style="color: #339966;">//进度条信息</span></p>
<p>Ext.TaskMgr.start({<br />
run:function(){<br />
count++;&nbsp;&nbsp; <span style="color: #339966;">//刷新10次后关闭信息提示对话框</span><br />
if(count &gt; 10){<br />
msgBox.hide();<br />
}<br />
<span style="color: #339966;">//计算进度</span><br />
percentage = count/10;<br />
<span style="color: #339966;">//生成进度条文字</span><br />
progressText = &#8216;当前完成度：&#8217;+percentage*100 + &#8220;%&#8221;;<br />
<span style="color: #339966;">//更新信息提示对话框</span><br />
msgBox.updateProgress(percentage,progressText,<br />
&#8216;当前时间：&#8217;+new Date().format(&#8217;Y-m-d g:i:s A&#8217;));</p>
<p>},<br />
interval:1000<br />
});</p>
</div>
</div>
<img src ="http://www.blogjava.net/sealyu/aggbug/304821.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sealyu/" target="_blank">seal</a> 2009-12-04 20:26 <a href="http://www.blogjava.net/sealyu/archive/2009/12/04/304821.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Extjs 如何动态添加window的items项（转）</title><link>http://www.blogjava.net/sealyu/archive/2009/12/01/304384.html</link><dc:creator>seal</dc:creator><author>seal</author><pubDate>Tue, 01 Dec 2009 07:50:00 GMT</pubDate><guid>http://www.blogjava.net/sealyu/archive/2009/12/01/304384.html</guid><wfw:comment>http://www.blogjava.net/sealyu/comments/304384.html</wfw:comment><comments>http://www.blogjava.net/sealyu/archive/2009/12/01/304384.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sealyu/comments/commentRss/304384.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sealyu/services/trackbacks/304384.html</trackback:ping><description><![CDATA[JScript code <br />
&lt;script type="text/javascript"&gt;&nbsp; <br />
<br />
var user1 = new Ext.form.TextField({ }) <br />
<br />
var user2= new Ext.form.TextField({ }) <br />
<br />
var c_window = new Ext.Window({ <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; title: 'title', <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; width: 950, <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; height: 530, <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; plain: true, <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; closeAction: 'hide', <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; defaults: { anchor: '95%' }, <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; items:[user1], <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; modal: true, <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; buttons: [{ text: '关闭', handler: function(){ c_window.hide(); } }, <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { text: '添加', <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; handler: function(){ <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; c_window.add(user2); // 添加新组件 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; c_window.render(); // 添加后需要重新渲染一遍。 } }] }); <br />
<br />
c_window.show(); <br />
&lt;/script&gt;
<img src ="http://www.blogjava.net/sealyu/aggbug/304384.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sealyu/" target="_blank">seal</a> 2009-12-01 15:50 <a href="http://www.blogjava.net/sealyu/archive/2009/12/01/304384.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>How to add a column with tools for each record?</title><link>http://www.blogjava.net/sealyu/archive/2009/11/30/304257.html</link><dc:creator>seal</dc:creator><author>seal</author><pubDate>Mon, 30 Nov 2009 06:57:00 GMT</pubDate><guid>http://www.blogjava.net/sealyu/archive/2009/11/30/304257.html</guid><wfw:comment>http://www.blogjava.net/sealyu/comments/304257.html</wfw:comment><comments>http://www.blogjava.net/sealyu/archive/2009/11/30/304257.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sealyu/comments/commentRss/304257.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sealyu/services/trackbacks/304257.html</trackback:ping><description><![CDATA[<ul>
    <li> <strong>Approach 1</strong>
    <ul>
        <li> Use the array grid example in your packaged download <a href="http://extjs.com/deploy/dev/examples/grid/array-grid.js" class="external text" title="http://extjs.com/deploy/dev/examples/grid/array-grid.js" rel="nofollow">array-grid.js</a>
        </li>
        <li> Add an extra column to the column model definition and a custom renderer.
        </li>
    </ul>
    </li>
</ul>
<pre source-php="">{header: "Controls", <br />
<br />
width: 60, <br />
<br />
sortable: false, <br />
<br />
renderer: function() {<br />
<br />
return '&lt;div class="controlBtn"&gt;<br />
<br />
&lt;img src="../shared/icons/fam/cog_edit.png"<br />
<br />
width="16" height="16" <br />
<br />
class="control_edit"&gt;<br />
<br />
&lt;img src="../shared/icons/fam/folder_go.png"<br />
<br />
width="16" height="16"<br />
<br />
class="control_go"&gt;&lt;/div&gt;';<br />
<br />
}, <br />
<br />
dataIndex: 'company'}</pre>
<ul>
    <li>
    <ul>
        <li> Then you would setup an event handler on the click event.
        </li>
    </ul>
    </li>
</ul>
<pre source-php="">grid.on('click', function(e) {<br />
<br />
var btn = e.getTarget('.controlBtn');        <br />
<br />
if (btn) {<br />
<br />
var t = e.getTarget();<br />
<br />
var v = this.getView();<br />
<br />
var rowIdx = v.findRowIndex(t);<br />
<br />
var record = this.getStore().getAt(rowIdx);            <br />
<br />
var control = t.className.split('_')[1];<br />
<br />
switch (control) {<br />
<br />
case 'edit':<br />
<br />
console.log('edit this record - ' + record.id);<br />
<br />
break;<br />
<br />
case 'go':<br />
<br />
console.log('go to this record - ' + record.id);<br />
<br />
break;<br />
<br />
}            <br />
<br />
}<br />
<br />
}, grid);</pre>
<ul>
    <li>
    <ul>
        <li> Add the following CSS rule in array-grid.html to give some padding and change the cursor.
        </li>
    </ul>
    </li>
</ul>
<pre source-php="">&lt;style&gt;<br />
<br />
.controlBtn img {<br />
<br />
padding-left: 4px;<br />
<br />
cursor: pointer;<br />
<br />
}<br />
<br />
&lt;/style&gt;</pre>
<ul>
    <li>
    <ul>
        <li> Using this same method you could add as many tools as
        you would like in the controls section and always give them the css
        class "controls_{toolname}". Ideally you would break this out into an
        XTemplate so that you could simply pass in whatever tools you would
        like to use and output them on the grid as well.
        </li>
    </ul>
    <br />
    </li>
</ul>
<ul>
    <li> Approach 2 utilizes a plugin as discussed  <a href="http://extjs.com/forum/showthread.php?t=24508" class="external text" title="http://extjs.com/forum/showthread.php?t=24508" rel="nofollow">here </a> &nbsp;:
    </li>
</ul>
<pre source-php="">http://rowactions.extjs.eu/</pre>
<img src ="http://www.blogjava.net/sealyu/aggbug/304257.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sealyu/" target="_blank">seal</a> 2009-11-30 14:57 <a href="http://www.blogjava.net/sealyu/archive/2009/11/30/304257.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ExtJs----布局(转)</title><link>http://www.blogjava.net/sealyu/archive/2009/11/19/302952.html</link><dc:creator>seal</dc:creator><author>seal</author><pubDate>Thu, 19 Nov 2009 09:00:00 GMT</pubDate><guid>http://www.blogjava.net/sealyu/archive/2009/11/19/302952.html</guid><wfw:comment>http://www.blogjava.net/sealyu/comments/302952.html</wfw:comment><comments>http://www.blogjava.net/sealyu/archive/2009/11/19/302952.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sealyu/comments/commentRss/302952.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sealyu/services/trackbacks/302952.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 布局概述&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在EXT中，所有的布局都是从Ext.Container开始的，Ext.Container的父类是Ext.BoxComponent。Ext.BoxComponent是一个盒子组件，可以定义宽度，高度和位置等属性。作为子类，Ex...&nbsp;&nbsp;<a href='http://www.blogjava.net/sealyu/archive/2009/11/19/302952.html'>阅读全文</a><img src ="http://www.blogjava.net/sealyu/aggbug/302952.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sealyu/" target="_blank">seal</a> 2009-11-19 17:00 <a href="http://www.blogjava.net/sealyu/archive/2009/11/19/302952.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Springing Around with ExtJS</title><link>http://www.blogjava.net/sealyu/archive/2009/11/19/302934.html</link><dc:creator>seal</dc:creator><author>seal</author><pubDate>Thu, 19 Nov 2009 07:21:00 GMT</pubDate><guid>http://www.blogjava.net/sealyu/archive/2009/11/19/302934.html</guid><wfw:comment>http://www.blogjava.net/sealyu/comments/302934.html</wfw:comment><comments>http://www.blogjava.net/sealyu/archive/2009/11/19/302934.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sealyu/comments/commentRss/302934.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sealyu/services/trackbacks/302934.html</trackback:ping><description><![CDATA[<p>While playing around more with ExtJS and Spring, I ran in to one of
my favorite annoyances — setting up a new project. I can create a new
webapp in IDEA (or Eclipse) and add some dependencies, but it is still
pretty empty. Maven can go a bit farther, but I don&#8217;t like how it
handles transitive dependencies. None of these will really give me a
good starting point out of the box without either copying a bunch of
stuff over from other projects or writing a lot from scratch.</p>
<p>To finally scratch that itch, and move further along the Spring
&amp; ExtJS path, I turned my demo project into a basic template. The
zip archive that you can grab at the bottom is a fully-configured
Spring web application, including Tiles, Spring Security, Spring MVC,
custom JSON view, Transactions and a Datasource.</p>
<p>To get started, grab the file, extract it to some directory. Open a
shell, navigate to the Template directory and run the ant command <code>ant dist</code>.
This will compile the whole project and create a Template.war file in
the dist directory. Note, I use Java 6 for all development, so if
you&#8217;re not at least at Java 5, you won&#8217;t be able to use this.</p>
<p>Before you drop the war file into Tomcat&#8217;s webapp directory, you&#8217;ll need to setup the database. First, copy the jar files in <code>lib/tomcat</code> into Tomcat&#8217;s <code>lib</code>
directory. This is the MySQL JDBC driver and the JTA files for
transactions. You&#8217;ll then need to create a new database on your local
MySQL instance called <code>tomcat</code>. For simplicity in
development, create a user with all rights to the tomcat database.
Here&#8217;s the code to run from a MySQL shell:</p>
<p><code>create database tomcat;<br />
use tomcat;<br />
grant all on tomcat.* to tomcat@localhost identified by 'apache';<br />
</code><br />
Your other option is to just put in your MySQL root username and
password. To do that, or change the connection string completely, edit <code>context.xml</code> under <code>web/META-INF</code>. If you don&#8217;t use MySQL, you will have to edit this file and also put the correct driver in Tomcat&#8217;s <code>lib</code> directory.</p>
<p>Once you have the database setup, drop the Template.war file into your Tomcat <code>webapps</code> directory and startup Tomcat. Assuming Tomcat is configured to listen on port 8080, you can open the sample by browsing to <code>http://localhost:8080/Template</code></p>
<p>The application only has a couple pages. First, the login page:</p>
<p><a href="http://www.sporcic.org/wp-content/uploads/2009/01/sample-login.png"><img wp-image-107="" alignnone="" title="sample-login" src="http://www.sporcic.org/wp-content/uploads/2009/01/sample-login-300x255.png" alt="Login Page" width="300" height="255" /></a></p>
<p>Spring Security is configured to route unauthenticated requests
through this page for login. You can take a look at the
applicationContext-security.xml file in WEB-INF to see how this was
done. There are two users configured for now. User <code>scott</code> with a password of <code>tiger</code> and user <code>bob</code> with a password of <code>password</code>. Yes, not very clever, but it works. Scott is in both the ROLE_ADMIN and ROLE_USER roles, while Bob is only in ROLE_USER.</p>
<p>If you login with scott, you&#8217;ll be taken to the index page, which looks like this:</p>
<p><a href="http://www.sporcic.org/wp-content/uploads/2009/01/sample-echo.png"><img wp-image-108="" alignnone="" title="sample-echo" src="http://www.sporcic.org/wp-content/uploads/2009/01/sample-echo-300x257.png" alt="Home Page" width="300" height="257" /></a></p>
<p>The index page simply contains a text box with a button. Entering a
message and pressing the button results in an Ajax call to the server
which echos the message back to the page. An HTML element in the middle
of the page is updated with the result via JavaScript.</p>
<p>You&#8217;ll notice in the footer of the page you can see the currently
logged in user on the left, and a link to log out on the right.
Clicking the log out link takes you to the logout page, which looks
like this:</p>
<p><a href="http://www.sporcic.org/wp-content/uploads/2009/01/sample-logout.png"><img wp-image-109="" alignnone="" title="sample-logout" src="http://www.sporcic.org/wp-content/uploads/2009/01/sample-logout-300x255.png" alt="Logout Page" width="300" height="255" /></a></p>
<p>Again, nothing fancy. Just a message saying you have logged out and
a link to login again. Use the login link to login as bob and try the
echo functionality again. This time you get a different result:</p>
<p><a href="http://www.sporcic.org/wp-content/uploads/2009/01/sample-badauth.png"><img wp-image-110="" alignnone="" title="sample-badauth" src="http://www.sporcic.org/wp-content/uploads/2009/01/sample-badauth-300x255.png" alt="Not an Admin" width="300" height="255" /></a></p>
<p>This demonstrates what happens with Spring Security via annotations. Here&#8217;s the echo method in the service layer:</p>
<p><a href="http://www.sporcic.org/wp-content/uploads/2009/01/echo-service.png"><img size-full="" wp-image-111="" title="echo-service" src="http://www.sporcic.org/wp-content/uploads/2009/01/echo-service.png" alt="" width="306" height="147" /></a></p>
<p>As you can see, the method is secured with an annotation indicating
the user must be in the ROLE_ADMIN role to use the method. Bob is only
in the ROLE_USER role, so the call to this service fails.</p>
<p>The application makes use of a ResourceBundleMessageSource for the
pages mapped through the htmlDispatch servlet. The login.jsp and
logout.jsp don&#8217;t go through the dispatch servlet, so they can&#8217;t use the
message bundle for the window and page title.</p>
<p>There is way too much to this simple application to cover completely
now, but I&#8217;ll give the highlights of what to go look at in the major
configuration files. Paths are relative to the project root:</p>
<ol>
    <li><code>web/WEB-INF/web.xml </code>- notice that I configure two
    dispatch servlets. One catching *.htm and one *.json. This sets things
    up to treat Ajax requests differently. Spring Security is also
    configured here.</li>
    <li><code>web/WEB-INF/applicationContext.xml</code> &#8211; typical
    application context for a Spring application. I turn on annotation
    handling with package scanning under the sample.core package. Apache
    Tiles is configured in this file, and I have also configured a
    Transaction Manager around the JDBC DataSource. You should tweak this
    based on your underlying persistence preferences. I&#8217;m a RowMapper fan,
    but you can plug in Hibernate or JPA.</li>
    <li><code>web/WEB-INF/htmlDispatch-servlet.xml </code>- the context for
    web (*.htm) requests. This sets up the ResourceBundle for messages and
    a typical ViewResolver mapping the *.htm requests to jsp files under
    web/WEB-INF/jsp. Also configures component scanning for the sample.web
    package.</li>
    <li><code>web/WEB-INF/jsonDispatch-servlet.xml</code> &#8211; the context for
    Ajax (*.json) requests. Configures component scanning for the
    sample.json package and specifies a custom Ajax ViewResolver. This will
    automagically serialize all ModelMaps returned out of the Controller
    responded to *.json requests to JSON.</li>
    <li><code>web/WEB-INF/applicationContext-security.xml</code> &#8211; so
    simple to look at, yet so painful to figure out. This is the Spring
    Security configuration file. Although it looks deceptively simple, it
    was a beating to figure it all out. It enables annotation-driven
    security, which you saw on the EchoService above. It also sets up the
    form login and locks down all the pages. Note I leave the /resource
    directory open. This is where I put all my javascript, stylesheets and
    images. If you want to secure those resources, you&#8217;ll need to get more
    specific on the intercept-urls.<br />
    Users are declared at the bottom. Passwords are clear text, which is
    fine for a trivial demo, but you would want to replace this with
    something more industrial-strength in a real application.</li>
    <li><code>web/WEB-INF/tiles-config.xml</code> &#8211; the Apache Tiles configuration. I only setup one definition here to keep it simple.</li>
    <li><code>web/WEB-INF/jsp/layouts/baseLayout.jsp</code> &#8211; the base
    layout used for tiles. I&#8217;m only inserting content at two locations in
    the template. In the HTML head section, I allow for an optional insert
    of headerContent. I use this to include JavaScripts specific to a page.
    The other content is within the center div called mainContent.<br />
    Note that the body is pretty empty and that the divs all have the
    x-hidden class. This means they are not normally visible. I use an
    ExtJS Viewport for layout, which uses the contents of these divs.</li>
    <li><code>web/resources/javascripts/layout.js</code> &#8211; this JavaScript file was included in the baseLayout.jsp above. It creates the Viewport using a border layout.</li>
    <li><code>web/resources/javascripts/index.js</code> &#8211; the JavaScript
    file included for the index.jsp page. It decorates the plain HTML
    inputs on the page to do the cool Ajax stuff. Note towards the bottom
    how I use ExtJS to set focus on a form field and to bind the ENTER key
    to the submit button.</li>
    <li><code>web/resources/javascripts/login.js</code> &#8211; the JavaScript
    file use for the login.jsp page. If you look at login.jsp, you&#8217;ll
    notice there is no form. Everything is created by ExtJS from the
    login.js file, including the cool box effect. One trick is that Spring
    Security wants a normal form POST for the login form. I override the
    form to do a standard submit instead of an Ajax submit and set the form
    action explicitly.</li>
</ol>
<p>This covers the major features. I&#8217;ll be using this as a base for
other projects and will be expanding out my ExtJS demo. Since there are
pretty much zero examples out there of tying together this stack, I
hope this can be of use to some folks.</p>
<p><a href="http://www.sporcic.org/wp-content/uploads/2009/01/template.zip">Project Template</a></p>
<ul>
    <li>2/28/2009 &#8211; upgrade to ExtJS 2.2.1, fixed compile issue on Linux, added in iBatis for ORM</li>
    <li>3/26/2009 &#8211; I&#8217;ve setup a dev server with the latest version of the template at <a href="http://www.codezombie.com/template">CodeZombie.com</a>
    so you can check it out without having to install. User scott/tiger for
    credentials. I&#8217;ll be updating this install with a more feature-rich
    demo application shortly</li>
    <li>3/28/2009 &#8211; changed around the project structure and build.xml to
    use Ivy for dependency management. Check the README.txt file in the
    root directory for the details.</li>
    <li>4/28/2009 &#8211; updated the included JSON encoder to be able to return JSON arrays by using the key <code>_root</code>
    in the model map. If this key is found, its content will be used as the
    root element of the return JSON instead of encoding the whole map. Also
    removed the unicode characters from StringScrubber to make the compiler
    on Linux happy.</li>
</ul>
<p>p.s. this pulls together a lot of jars and pieces from different
folks to build the demo. If you use this for more than playing around,
you need to make sure you respect whatever licenses the authors have in
place.</p>
<img src ="http://www.blogjava.net/sealyu/aggbug/302934.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sealyu/" target="_blank">seal</a> 2009-11-19 15:21 <a href="http://www.blogjava.net/sealyu/archive/2009/11/19/302934.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ExtJS中get、getDom、getCmp、getBody、getDoc的使用（转）</title><link>http://www.blogjava.net/sealyu/archive/2009/11/18/302854.html</link><dc:creator>seal</dc:creator><author>seal</author><pubDate>Wed, 18 Nov 2009 14:13:00 GMT</pubDate><guid>http://www.blogjava.net/sealyu/archive/2009/11/18/302854.html</guid><wfw:comment>http://www.blogjava.net/sealyu/comments/302854.html</wfw:comment><comments>http://www.blogjava.net/sealyu/archive/2009/11/18/302854.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sealyu/comments/commentRss/302854.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sealyu/services/trackbacks/302854.html</trackback:ping><description><![CDATA[Ext中包含了几个以get开头的方法，这些方法可以用来得到文档中DOM、得到当前文档中的组件、得到Ext元素等，在使用中要注意区别使用。<br />
<br />
<font color="#993300">1、get方法</font><br />
get方法用来得到一个Ext元素，也就是类型为Ext.Element的对象，
Ext.Element类是Ext对DOM的封装，代表DOM的元素，可以为每一个DOM创建一个对应的Element对象，可以通过Element对象
上的方法来实现对DOM指定的操作，比如用hide方法可以隐藏元素、initDD方法可以让指定的DOM具有拖放特性等。get方法其实是
Ext.Element.get的简写形式。<br />
get方法中只有一个参数，这个参数是混合参数，可以是DOM节点的id、也可以是一个Element、或者是一个DOM节点对象等。<br />
代码：<br />
&lt;div id="EXTJS"&gt;aaa&lt;/div&gt;<br />
Ext.onReady(function(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;     var e=new Ext.Element("EXTJS");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;     alert(Ext.get("EXTJS"));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;     alert(Ext.get(document.getElementById("EXTJS")));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;     alert(Ext.get(e));<br />
}); 三个方法都可以得到一个与DOM节点 EXTJS对应的Ext元素。<br />
<br />
<font color="#993300">2、getCmp方法－获得Ext组件。</font><br />
getCmp方法用来获得一个Ext组件，也就是一个已经在页面中初始化了的Component或其子类的对象，getCmp方法其实是Ext.ComponentMgr.get方法的简写形式。getCmp方法中只有一个参数，也就是组件的id。<br />
代码：<br />
&lt;div id="EXTJS"&gt;aaa&lt;/div&gt;<br />
Ext.onReady(function(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;     var h=new Ext.Panel({<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;     id:"h2",<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;     renderTo:"EXTJS",<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;     width:300,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;     height:200<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;     });<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;     Ext.getCmp("h2").setTitle("新的标题");<br />
<br />
});在代码中，我们使用Ext.getCmp("h2").来得到id为h2的组件，并调用其setTitle方法来设置该面板的标题。<br />
<br />
<font color="#993300">3、getDom方法－获得DOM节点</font><br />
getDom方法能够得到文档中的DOM节点，该方法中包含一个参数，该参数可以是DOM节点的id、DOM节点对象或DOM节点对应的Ext元素(Element)等。<br />
代码：<br />
&lt;div id="EXTJS"&gt;tttt&lt;/div&gt;<br />
Ext.onReady(function(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;     var e=new Ext.Element("EXTJS");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;     Ext.getDom("EXTJS");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;     Ext.getDom(e);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;     Ext.getDom(e.dom);<br />
});三个语句返回都是同一个DOM节点对象。<br />
<br />
<font color="#993300">4、getBody方法－得到文档的body节点元素(Element)。</font><br />
该方法直接得到文档中与document.body这个DOM节点对应的ExtJS元素（Element），实质就是把document.body对象封装成ExtJS元素对象返回，该方法不带任何参数。比如下面的代码把面板h直接渲染到文档的body元素中。<br />
Ext.onReady(function(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;     var h=new Ext.Panel({title:"测试",width:300,height:200});<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;     h.render(Ext.getBody());<br />
});<br />
<br />
<font color="#993300">5、getDoc方法－获得与document对应的Ext元素(Element)</font><br />
getDoc方法实质上就是得到当前html文档对象，也就是把document对象封装成ExtJS的Element对象返回，该方法不带任何参数，即：<br />
getDoc = function(){<br />
&nbsp;&nbsp;&nbsp;     return Ext.get(document);<br />
}
<img src ="http://www.blogjava.net/sealyu/aggbug/302854.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sealyu/" target="_blank">seal</a> 2009-11-18 22:13 <a href="http://www.blogjava.net/sealyu/archive/2009/11/18/302854.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Ext中初始化配置项iconCls的使用方法(转)</title><link>http://www.blogjava.net/sealyu/archive/2009/11/18/302852.html</link><dc:creator>seal</dc:creator><author>seal</author><pubDate>Wed, 18 Nov 2009 14:02:00 GMT</pubDate><guid>http://www.blogjava.net/sealyu/archive/2009/11/18/302852.html</guid><wfw:comment>http://www.blogjava.net/sealyu/comments/302852.html</wfw:comment><comments>http://www.blogjava.net/sealyu/archive/2009/11/18/302852.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sealyu/comments/commentRss/302852.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sealyu/services/trackbacks/302852.html</trackback:ping><description><![CDATA[<span id="ctl00_MainContentPlaceholder_ctl01_ctl00_lblEntry">
<div id="msgcns!C201294984BAF810!865" class="bvMsg">
<p>使用过Ext（<a href="http://www.extjs.com/">http://www.extjs.com</a>）
的同志都应该知道，每一个组件（Component）在初始化的时候，都会有一个配置参数（Config）{在Ext2中，基本上所有的组件的构造函数只
接受一个参数，这个参数或者是一个Config Object或都是一个Array of Config
Object}，其中，许多组件，如Menu，Button都有一个配置选项iconCls，很明显，这个是用来配置按钮等的图标的，所以假设我们要初始
化一个Button，我们在JS里这样写：<br />
var button = new Ext.Button({<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; text: "Hello",<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; iconCls: "hello-button"<br />
}); </p>
<p>然后我们再在CSS中写下如下规则：<br />
.hello-button {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; background: url(images/hello.png) left top no-repeat;<br />
} </p>
<p>把JS和CSS文件都正确的引入到页面当中后，我们只能看到按钮上空出来了一个放置图片的位置，而图片并没有显示出来，通过使用Firebug（<a href="http://www.getfirebug.com/">http://www.getfirebug.com</a>）
来查看页面，通过Inspect我们生成的按钮的Style，我们发现CSS规则hello-button被Ext原有的CSS规则覆盖掉了。但是官方给
的Sample里是可以用的啊，查看Sample里的CSS，我发现它比我写的多了一行字，!important，然后，我把我原有的CSS规则修正为：<br />
.hello-button {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; background: url(images/hello.png) left top no-repeat <strong>!important</strong>;<br />
} </p>
<p>Bingo~这次图片正确的显示在了按钮上。 </p>
<p>当然，按照官方的API，你还有另外一种在按钮上添加图标的方法，将button的Config如下设置：<br />
var button = new Ext.Button({<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; text: "Hello",<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <strong>icon: "images/public.gif",<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cls: "x-btn-text-icon"</strong><br />
}); </p>
<p>这样做的坏处在于，你必须将图片的位置写入到JS里，没有将表现的部分从JS里脱离，如果使用第一种方法的话，可以更容易的更改某个按钮的图标。</p>
</div>
</span>
<img src ="http://www.blogjava.net/sealyu/aggbug/302852.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sealyu/" target="_blank">seal</a> 2009-11-18 22:02 <a href="http://www.blogjava.net/sealyu/archive/2009/11/18/302852.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ExtJS的xtype列表</title><link>http://www.blogjava.net/sealyu/archive/2009/11/18/302849.html</link><dc:creator>seal</dc:creator><author>seal</author><pubDate>Wed, 18 Nov 2009 13:47:00 GMT</pubDate><guid>http://www.blogjava.net/sealyu/archive/2009/11/18/302849.html</guid><wfw:comment>http://www.blogjava.net/sealyu/comments/302849.html</wfw:comment><comments>http://www.blogjava.net/sealyu/archive/2009/11/18/302849.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sealyu/comments/commentRss/302849.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sealyu/services/trackbacks/302849.html</trackback:ping><description><![CDATA[<p><strong><u>xtype &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Class</u></strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p><strong>基本组件：</strong>&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;&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; </p>
<p>box &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ext.BoxComponent &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;具有边框属性的组件</p>
<p>button &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Ext.Button &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; 按钮</p>
<p>colorpalette &nbsp;&nbsp;&nbsp;&nbsp; Ext.ColorPalette &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 调色板</p>
<p>component &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Ext.Component &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; 组件</p>
<p>container &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ext.Container &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; 容器</p>
<p>cycle &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ext.CycleButton</p>
<p>dataview &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ext.DataView &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; 数据显示视图</p>
<p>datepicker &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ext.DatePicker &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;日期选择面板</p>
<p>editor &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ext.Editor &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;编辑器</p>
<p>editorgrid &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ext.grid.EditorGridPanel &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;可编辑的表格</p>
<p>grid &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ext.grid.GridPanel &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 表格</p>
<p>paging &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ext.PagingToolbar &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 工具栏中的间隔</p>
<p>panel &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ext.Panel &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; 面板</p>
<p>progress &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ext.ProgressBar &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;进度条</p>
<p>splitbutton &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Ext.SplitButton &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; 可分裂的按钮</p>
<p>tabpanel &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Ext.TabPanel &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; 选项面板</p>
<p>treepanel &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ext.tree.TreePanel &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 树</p>
<p>viewport &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ext.ViewPort &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;视图</p>
<p>window &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ext.Window &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; 窗口</p>
<p><strong>工具栏组件：</strong></p>
<p>toolbar &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ext.Toolbar &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;工具栏</p>
<p>tbbutton &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Ext.Toolbar.Button &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 按钮</p>
<p>tbfill &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Ext.Toolbar.Fill &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;文件</p>
<p>tbitem &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ext.Toolbar.Item &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 工具条项目</p>
<p>tbseparator &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ext.Toolbar.Separator &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;工具栏分隔符</p>
<p>tbspacer &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ext.Toolbar.Spacer &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;工具栏空白</p>
<p>tbsplit &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Ext.Toolbar.SplitButton &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;工具栏分隔按钮</p>
<p>tbtext &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ext.Toolbar.TextItem &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;工具栏文本项</p>
<p><strong>表单及字段组件：</strong></p>
<p>form &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ext.FormPanel Form&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;面板</p>
<p>checkbox &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Ext.form.Checkbox checkbox &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 录入框</p>
<p>combo &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ext.form.ComboBox combo &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 选择项</p>
<p>datefield &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ext.form.DateField &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 日期选择项</p>
<p>field &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ext.form.Field &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; 表单字段</p>
<p>fieldset &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ext.form.FieldSet &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;表单字段组</p>
<p>hidden &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ext.form.Hidden &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; 表单隐藏域</p>
<p>htmleditor &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ext.form.HtmlEditor html &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 编辑器</p>
<p>numberfield &nbsp;&nbsp;&nbsp;&nbsp;Ext.form.NumberField &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 数字编辑器</p>
<p>radio &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ext.form.Radio &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; 单选按钮</p>
<p>textarea &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ext.form.TextArea &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 区域文本框</p>
<p>textfield &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ext.form.TextField &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 表单文本框</p>
<p>timefield &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ext.form.TimeField &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 时间录入项</p>
<p>trigger &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ext.form.TriggerField &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 触发录入项</p>
<img src ="http://www.blogjava.net/sealyu/aggbug/302849.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sealyu/" target="_blank">seal</a> 2009-11-18 21:47 <a href="http://www.blogjava.net/sealyu/archive/2009/11/18/302849.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Ext.data专题（转）</title><link>http://www.blogjava.net/sealyu/archive/2009/11/17/302707.html</link><dc:creator>seal</dc:creator><author>seal</author><pubDate>Tue, 17 Nov 2009 06:57:00 GMT</pubDate><guid>http://www.blogjava.net/sealyu/archive/2009/11/17/302707.html</guid><wfw:comment>http://www.blogjava.net/sealyu/comments/302707.html</wfw:comment><comments>http://www.blogjava.net/sealyu/archive/2009/11/17/302707.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sealyu/comments/commentRss/302707.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sealyu/services/trackbacks/302707.html</trackback:ping><description><![CDATA[<h3 title="转载"><a href="http://canfly2010.javaeye.com/blog/457922">Ext.data专题一：Ext.data简介</a></h3>
<div>
<p><span style="font-size: large;">Ext.data在命名空间中定义了一系列store、reader和proxy。</span></p>
<p><span style="font-size: large;">Grid和ComboxBox都是以Ext.data为媒介获取数据的，它包含异步加载、类型转换、分页等功能。</span></p>
<p><span style="font-size: large;">Ext.data默认支持Array、JSON、XML等数据格式，可以通过
Memory、HTTP、ScriptTag等方式获得这些格式的数据。如果要实现新的协议和新的数据结构，只需要扩展reader和proxy即可。
DWRProxy就实现了自身的proxy和reader，让EXT可以直接从DWR获得数据</span></p>
</div>
<h3 title="转载"><a href="http://canfly2010.javaeye.com/blog/457923">Ext.data专题二：Ext.data.Connection</a></h3>
<p><span style="font-size: large; color: #008080;">Ext.data.Connection
是对Ext.lib.Ajax的封装，它提供了配置使用Ajax的通用方式，它在内部通过Ext.lib.Ajax实现与后台的异步调用。与底层的
Ext.lib.Ajax相比，Ext.data. Connection提供了更简洁的配置方式，使用起来更方便。</span></p>
<p><span style="font-size: large; color: #008080;">Ext.data.Connection
主要用于在Ext.data.HttpProxy和Ext.data.ScriptTagProxy中执行与后台交互的任务，它会从指定的URL获得数
据，并把后台返回的数据交给HttpProxy或ScriptTagProxy处理，Ext.data.Connection的使用方式如代码清单</span></p>
<p><br />
<span style="font-size: large; color: #008080;">var conn = new Ext.data.Connection({</span></p>
<p><span style="font-size: large; color: #008080;">&nbsp;&nbsp;&nbsp; autoAbort: false,</span></p>
<p><span style="font-size: large; color: #008080;">&nbsp;&nbsp;&nbsp; defaultHeaders: {</span></p>
<p><span style="font-size: large; color: #008080;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; referer: 'http://localhost:8080/'</span></p>
<p><span style="font-size: large; color: #008080;">&nbsp;&nbsp;&nbsp; },</span></p>
<p><span style="font-size: large; color: #008080;">&nbsp;&nbsp;&nbsp; disableCaching : false,</span></p>
<p><span style="font-size: large; color: #008080;">&nbsp;&nbsp;&nbsp; extraParams : {</span></p>
<p><span style="font-size: large; color: #008080;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; name: 'name'</span></p>
<p><span style="font-size: large; color: #008080;">&nbsp;&nbsp;&nbsp; },</span></p>
<p><span style="font-size: large; color: #008080;">&nbsp;&nbsp;&nbsp; method : 'GET',</span></p>
<p><span style="font-size: large; color: #008080;">&nbsp;&nbsp;&nbsp; timeout : 300,</span></p>
<p><span style="font-size: large; color: #008080;">&nbsp;&nbsp;&nbsp; url : '01-01.txt'</span></p>
<p><br />
<span style="font-size: large; color: #008080;">});</span></p>
<p><span style="font-size: large; color: #008080;">在使用
Ext.data.Connection之前，都要像上面这样创建一个新的Ext.Connection实例。我们可以在构造方法里配置对应的参数，比如
autoAbort表示链接是否会自动断开、default-
Headers参数表示请求的默认首部信息、disableCaching参数表示请求是否会禁用缓存、extraParams参数代表请求的额外参数、
method参数表示请求方法、timeout参数表示连接的超时时间、url参数表示请求访问的网址等。</span></p>
<p><span style="font-size: large; color: #008080;">在创建了conn之后，可以调用request()函数发送请求，处理返回的结果，如下面的代码所示</span></p>
<p><br />
</p>
<h3 title="转载"><a href="http://canfly2010.javaeye.com/blog/457925">Ext.data专题三：Ext.data.Record</a></h3>
<div>
<p><span style="font-size: medium; color: #008080;">Ext.data.Record就是一个设定了内部数据类型的对象，它是Ext.data.Store的最基本组成部分。如果把Ext.data.Store看作是一张二维表，那么它的每一行就对应一个Ext.data. Record实例。</span></p>
<p><span style="font-size: medium; color: #008080;">Ext.data.Record的主要功能是保存数据，并且在内部数据发生改变时记录修改的状态，它还可以保留修改之前的原始值。</span></p>
<p><span style="font-size: medium; color: #008080;">我们使用Ext.data.Record时通常都是由create()函数开始，首先用create()函数创建一个自定义的Record类型，如下面的代码所示。</span></p>
<p><span style="font-size: medium; color: #008080;">var PersonRecord = Ext.data.Record.create([</span></p>
<p><span style="font-size: medium; color: #008080;">&nbsp;&nbsp;&nbsp; {name: 'name', type: 'string'},</span></p>
<p><span style="font-size: medium; color: #008080;">&nbsp;&nbsp;&nbsp; {name: 'sex', type: 'int'}</span></p>
<p><span style="font-size: medium; color: #008080;">]);</span></p>
<p><span style="font-size: medium; color: #008080;">PersonRecord就是我们定义的新类型，包含字符串类型的name和整数类型的sex两个属性，然后我们使用new关键字创建PersonRecord的实例，如下面的代码所示。</span></p>
<p><span style="font-size: medium; color: #008080;">var boy = new PersonRecord({</span></p>
<p><span style="font-size: medium; color: #008080;">&nbsp;&nbsp;&nbsp; name: 'boy',</span></p>
<p><span style="font-size: medium; color: #008080;">&nbsp;&nbsp;&nbsp; sex: 0</span></p>
<p><span style="font-size: medium; color: #008080;">});</span></p>
<p><span style="font-size: medium; color: #008080;">创建对象时，可以直接通过构造方法为对象赋予初始值，将'boy'赋值给name，0赋值给sex。</span></p>
<p><span style="font-size: medium; color: #008080;">现在，我们得到了PersonRecord的实例boy，如何才能得到它的属性呢？以下三种方式都可以获得boy中name属性的数据，如下面的代码所示。</span></p>
<p><span style="font-size: medium; color: #008080;">alert(boy.data.name);</span></p>
<p><span style="font-size: medium; color: #008080;">alert(boy.data['name']);</span></p>
<p><span style="font-size: medium; color: #008080;">alert(boy.get('name'));</span></p>
<p><span style="font-size: medium; color: #008080;">这里涉及
Ext.data.Record的data属性，这是定义在Ext.data.Record中的一个公共属性，用于保存当前record对象的所有数据。
它是一个JSON对象，可以直接从它里面获得需要的数据。可以通过Ext.data.Record的get()函数方便地从data属性中获得指定的属性
值。</span></p>
<p><span style="font-size: medium; color: #008080;">如果我们需要修改boy中的数据，请不要使用以下方式直接操作data，如下面的代码所示。</span></p>
<p><span style="font-size: medium; color: #008080;">&nbsp;&nbsp;&nbsp; boy.data.name = 'boy name';</span></p>
<p><span style="font-size: medium; color: #008080;">&nbsp;&nbsp;&nbsp; boy.data['name'] = 'boy name';</span></p>
<p><span style="font-size: medium; color: #008080;">而应该使用set()函数，如下面的代码所示。</span></p>
<p><span style="font-size: medium; color: #008080;">&nbsp;&nbsp;&nbsp; boy.set('name', 'body name');</span></p>
<p><span style="font-size: medium; color: #008080;">set()函数会判断属性值是否发生了改变，如果改变了，就要将当前对象的dirty属性设置为true，并将修改之前的原始值放入modified对象中，供其他函数使用。如果直接操作data中的值，record就无法记录属性数据的修改情况。</span></p>
<p><span style="font-size: medium; color: #008080;">Record的属性数据被修改后，我们可以执行如下几种操作。</span></p>
<p><span style="font-size: medium; color: #008080;">q&nbsp;&nbsp; commit()（提交）：这个函数的效果是设置dirty为false，并删除modified中保存的原始数据。</span></p>
<p><span style="font-size: medium; color: #008080;">q&nbsp;&nbsp; reject()（撤销）：这个函数的效果是将data中已经修改了的属性值都恢复成modified中保存的原始数据，然后设置dirty为false，并删除保存原始数据的modified对象。</span></p>
<p><span style="font-size: medium; color: #008080;">q&nbsp;&nbsp; getChanges()获得修改的部分：这个函数会把data中经过修改的属性和数据放在一个JSON对象里并返回。例如上例中，getChanges()返回的结果是{name:&#8217;body name&#8217;}。</span></p>
<p><span style="font-size: medium; color: #008080;">q&nbsp;&nbsp; 我们还可以调用isModified()判断当前record中的数据是否被修改。</span></p>
<p><span style="font-size: medium; color: #008080;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Ext.data.Record还提供了用于复制record实例的函数copy()。</span></p>
<p><span style="font-size: medium; color: #008080;">var copyBoy = boy.copy();</span></p>
<p><span style="font-size: medium; color: #008080;">这样我们就得到了boy的一个副本，它里面包含了boy的data数据，但copy()函数不会复制dirty和modified等额外的属性值。</span></p>
<p><br />
</p>
<h3 title="转载"><a href="http://canfly2010.javaeye.com/blog/457927">Ext.data专题四：Ext.data.Store</a></h3>
<div>
<p><span style="font-size: medium; color: #008080;">Ext.data.Store是EXT中用来进行数据交换和数据交互的标准中间件，无论是Grid还是ComboBox，都是通过它实现数据读取、类型转换、排序分页和搜索等操作的。</span></p>
<p><span style="font-size: medium; color: #008080;">Ext.data.Store中有一个Ext.data.Record数组，所有数据都存放在这些Ext.data. Record实例中，为后面的读取和修改操作做准备。</span></p>
<p><strong><span style="font-size: medium; color: #008080;">一、Ext.data.Store基本应用</span></strong></p>
<p><span style="font-size: medium; color: #008080;">在使用之前，首先要创建一个Ext.data.Store的实例，如下面的代码所示。</span></p>
<p><span style="font-size: medium; color: #008080;">var data = [</span></p>
<p><span style="font-size: medium; color: #008080;">&nbsp;&nbsp;&nbsp; ['boy', 0],</span></p>
<p><span style="font-size: medium; color: #008080;">&nbsp;&nbsp;&nbsp; ['girl', 1]</span></p>
<p><span style="font-size: medium; color: #008080;">];</span></p>
<p><span style="font-size: medium; color: #008080;">var store = new Ext.data.Store({</span></p>
<p><span style="font-size: medium; color: #008080;">&nbsp;&nbsp;&nbsp; proxy: new Ext.data.MemoryProxy(data),</span></p>
<p><span style="font-size: medium; color: #008080;">&nbsp;&nbsp;&nbsp; reader: new Ext.data.ArrayReader({}, PersonRecord)</span></p>
<p><span style="font-size: medium; color: #008080;">});</span></p>
<p><span style="font-size: medium; color: #008080;">store.load();</span></p>
<p><span style="font-size: medium; color: #008080;">每个store最少需要两个组件的支持，分别是proxy和reader，proxy用于从某个途径读取原始数据，reader用于将原始数据转换成Record实例。</span></p>
<p><span style="font-size: medium; color: #008080;">这里我们使用的是
Ext.data.MemoryProxy和Ext.data.ArrayReader，将data数组中的数据转换成对应的几个
PersonRecord实例，然后放入store中。store创建完毕之后，执行store.load()实现这个转换过程。</span></p>
<p><span style="font-size: medium; color: #008080;">经过转换之后，store里的数据就可以提供给Grid或ComboBox使用了，这就是Ext.data. Store的最基本用法。</span></p>
<p><strong><span style="font-size: medium; color: #008080;">二、Ext.data.Store对数据进行排序</span></strong></p>
<p><span style="font-size: medium; color: #008080;">Ext.data.Store提供了一系列属性和函数，利用它们对数据进行排序操作。</span></p>
<p><span style="font-size: medium; color: #008080;">可以在创建Ext.data.Store时使用sortInfo参数指定排序的字段和排序方式，如下面的代码所示。</span></p>
<p><span style="font-size: medium; color: #008080;">var store = new Ext.data.Store({</span></p>
<p><span style="font-size: medium; color: #008080;">&nbsp;&nbsp;&nbsp; proxy: new Ext.data.MemoryProxy(data),</span></p>
<p><span style="font-size: medium; color: #008080;">&nbsp;&nbsp;&nbsp; reader: new Ext.data.ArrayReader({}, PersonRecord),</span></p>
<p><span style="font-size: medium; color: #008080;">&nbsp;&nbsp;&nbsp; sortInfo: {field: 'name', direction: 'DESC'}</span></p>
<p><span style="font-size: medium; color: #008080;">});</span></p>
<p><span style="font-size: medium; color: #008080;">这样，在store加载数据之后，就会自动根据name字段进行降序排列。对store使用store.setDefaultSort('name','DESC');也会达到同样效果。</span></p>
<p><span style="font-size: medium; color: #008080;">也可以在任何时候调用sort()函数，比如store.sort('name', 'DESC');，对store中的数据进行排序。</span></p>
<p><span style="font-size: medium; color: #008080;">如果我们希望获得store的排序信息，可以调用getSortState()函数，返回的是类似{field: "name", direction: " DESC"}的JSON对象。</span></p>
<p><span style="font-size: medium; color: #008080;">与排序相关的参数还有
remoteSort，这个参数是用来实现后台排序功能的。当设置为remoteSort:true时，store会在向后台请求数据时自动加入sort
和dir两个参数，分别对应排序的字段和排序的方式，由后台获取并处理这两个参数，在后台对所需数据进行排序操作。remoteSort:true也会导
致每次执行sort()时都要去后台重新加载数据，而不能只对本地数据进行排序。</span></p>
<p><strong><span style="font-size: medium; color: #008080;">三、Ext.data.Store加载及显示数据</span></strong></p>
<p><span style="font-size: medium; color: #008080;">store创建好后，需要调用load()函数加载数据，加载成功后才能对store中的数据进行操作。load()调用的完整过程如下面的代码所示。</span></p>
<p><span style="font-size: medium; color: #008080;">store.load({</span></p>
<p><span style="font-size: medium; color: #008080;">&nbsp;&nbsp;&nbsp; params: {start:0,limit:20},</span></p>
<p><span style="font-size: medium; color: #008080;">&nbsp;&nbsp;&nbsp; callback: function(records, options, success){</span></p>
<p><span style="font-size: medium; color: #008080;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Ext.Msg.alert('info', '加载完毕');</span></p>
<p><span style="font-size: medium; color: #008080;">&nbsp;&nbsp;&nbsp; },</span></p>
<p><span style="font-size: medium; color: #008080;">&nbsp;&nbsp;&nbsp; scope: store,</span></p>
<p><span style="font-size: medium; color: #008080;">&nbsp;&nbsp;&nbsp; add: true</span></p>
<p><span style="font-size: medium; color: #008080;">});</span></p>
<p><span style="font-size: medium; color: #008080;">&nbsp; params是在store加载时发送的附加参数。</span></p>
<p><span style="font-size: medium; color: #008080;">&nbsp; callback是加载完毕时执行的回调函数，它包含3个参数：records参数表示获得的数据，options表示执行load()时传递的参数，success表示是否加载成功。</span></p>
<p><span style="font-size: medium; color: #008080;">Scope用来指定回调函数执行时的作用域。</span></p>
<p><span style="font-size: medium; color: #008080;">&nbsp; Add为true时，load()得到的数据会添加在原来的store数据的末尾，否则会先清除之前的数据，再将得到的数据添加到store中。</span></p>
<p><span style="font-size: medium; color: #008080;">一般来说，为了对store中的数据进行初始化，load()函数只需要执行一次。如果用params参数指定了需要使用的参数，以后再次执行reload()重新加载数据时，store会自动使用上次load()中包含的params参数内容。</span></p>
<p><span style="font-size: medium; color: #008080;">如果有一些需要固定传递的参数，也可以使用baseParams参数执行，它是一个JSON对象，里面的数据会作为参数发送给后台处理，如下面的代码所示。</span></p>
<p><span style="font-size: medium; color: #008080;">store.baseParams.start = 0;</span></p>
<p><span style="font-size: medium; color: #008080;">store.baseParams.limit = 20;</span></p>
<p><span style="font-size: medium; color: #008080;">为store加载数据之后，有时不需要把所有数据都显示出来，这时可以使用函数filter和filterBy对store中的数据进行过滤，只显示符合条件的部分，如下面的代码所示。</span></p>
<p><span style="font-size: medium; color: #008080;">filter( String field, String/RegExp value, [Boolean anyMatch], <br />
[Boolean caseSensitive] ) : void</span></p>
<p><span style="font-size: medium; color: #008080;">filter()函数的用法与之前谈到的find()相似，如下面的代码所示。</span></p>
<p><span style="font-size: medium; color: #008080;">store.filter('name', 'boy');</span></p>
<p><span style="font-size: medium; color: #008080;">对应的filterBy()与findBy()类似，也可以在自定义的函数中实现各种复杂判断，如下面的代码所示。</span></p>
<p><span style="font-size: medium; color: #008080;">store.filterBy(function(record) {</span></p>
<p><span style="font-size: medium; color: #008080;">&nbsp;&nbsp;&nbsp; return record.get('name') == 'girl' &amp;&amp; record.get('sex') == 1;</span></p>
<p><span style="font-size: medium; color: #008080;">});</span></p>
<p><span style="font-size: medium; color: #008080;">如果想取消过滤并显示所有数据，那么可以调用clearFilter()函数，如下面的代码所示。</span></p>
<p><span style="font-size: medium; color: #008080;">store.clearFilter();</span></p>
<p><span style="font-size: medium; color: #008080;">如果想知道store上是否设置了过滤器，可以通过isFiltered()函数进行判断。</span></p>
<p><strong><span style="font-size: medium; color: #008080;">四、Ext.data.Store其他功能</span></strong></p>
<p><span style="font-size: medium; color: #008080;">除了上面提到的数据获取、排序、更新、显示等功能外，store还提供了其他一些功能函数。</span></p>
<p><span style="font-size: medium; color: #008080;">collect( String dataIndex, [Boolean allowNull], [Boolean bypassFilter] ) : Array</span></p>
<p><span style="font-size: medium; color: #008080;">collect函数获得
指定的dataIndex对应的那一列的数据，当allowNull参数为true时，返回的结果中可能会包含null、undefined或空字符串，
否则collect函数会自动将这些空数据过滤掉。当bypassFilter参数为true时，collect的结果不会受查询条件的影响，无论查询条
件是什么都会忽略掉，返回的信息是所有的数据，如下面的代码所示。</span></p>
<p><span style="font-size: medium; color: #008080;">alert(store.collect('name'));</span></p>
<p><span style="font-size: medium; color: #008080;">这样会获得所有name列的值，示例中返回的是包含了'boy'和'girl'的数组。</span></p>
<p><span style="font-size: medium; color: #008080;">getTotalCount()用于在翻页时获得后台传递过来的数据总数。如果没有设置翻页，get- TotalCount()的结果与getCount()相同，都是返回当前的数据总数，如下面的代码所示。</span></p>
<p><span style="font-size: medium; color: #008080;">alert(store.getTotalCount());</span></p>
<p><span style="font-size: medium; color: #008080;">indexOf(Ext.data.Record record)和indexOfId(String id)函数根据record或record的id获得record对应的行号，如下面的代码所示。</span></p>
<p><span style="font-size: medium; color: #008080;">alert(store.indexOf(store.getAt(1)));</span></p>
<p><span style="font-size: medium; color: #008080;">alert(store.indexOfId(1001));</span></p>
<p><span style="font-size: medium; color: #008080;">loadData(object data, [Boolean append])从本地JavaScript变量中读取数据，append为true时，将读取的数据附加到原数据后，否则执行整体更新，如下面的代码所示。</span></p>
<p><span style="font-size: medium; color: #008080;">store.loadData(data, true);</span></p>
<p><span style="font-size: medium; color: #008080;">Sum(String property, Number start, Number end):Number用于计算某一个列从start到end的总和，如下面的代码所示。</span></p>
<p><span style="font-size: medium; color: #008080;">alert(store.sum('sex'));</span></p>
</div>
</div>
<h3 title="转载"><a href="http://canfly2010.javaeye.com/blog/457928">Ext.data专题五：常用proxy之MemoryProxy</a></h3>
<div>
<p><span style="font-size: medium; color: #008000;">MemoryProxy只能从JavaScript对象获得数据，可以直接把数组，或JSON和XML格式的数据交给它处理，如下面的代码所示。</span></p>
<p><span style="font-size: medium; color: #008000;">var proxy = new Ext.data.MemoryProxy([<br />
&nbsp;&nbsp;&nbsp; ['id1','name1','descn1'],<br />
&nbsp;&nbsp;&nbsp; ['id2','name2','descn2']<br />
]);</span></p>
<p><span style="font-size: medium; color: #008000;">HttpProxy使用HTTP协议，通过Ajax去后台取数据，构造它时需要设置</span><a href="http://hi.baidu.com/fc/editor/%20xxx.jsp"><span style="font-size: medium; color: #008000;">url:'xxx.jsp'</span></a><span style="font-size: medium; color: #008000;">参数。这里的url可以替换成任何一个合法的网址，这样HttpProxy才知道去哪里获取数据，如下面的代码所示。</span></p>
<p><span style="font-size: medium; color: #008000;">var proxy = new Ext.data.HttpProxy({url:'xxx.jsp'});&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></p>
<p><span style="font-size: medium; color: #008000;">后台需要返回EXT所需要的JSON格式的数据，下面的内容就是后台使用JSP的一个范例，如下面的代码所示。</span></p>
<p><span style="font-size: medium; color: #008000;">response.setContentType("application/x-json");</span></p>
<p><span style="font-size: medium; color: #008000;">Writer out = response.getWriter();</span></p>
<p><span style="font-size: medium; color: #008000;">out.print("[" +</span></p>
<p><span style="font-size: medium; color: #008000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "['id1','name1','descn1']" +</span></p>
<p><span style="font-size: medium; color: #008000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "['id2','name2','descn2']" +</span></p>
<p><span style="font-size: medium; color: #008000;">&nbsp;&nbsp;&nbsp; "]");&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></p>
<p><span style="font-size: medium; color: #008000;">请注意，这里的HttpProxy不支持跨域，它只能从同一域中获得数据。如果想跨域，请参考下面的ScriptTagProxy。</span></p>
<p><strong><span style="font-size: medium; color: #008000;">常用proxy之ScriptTagProxy</span></strong></p>
<p><span style="font-size: medium; color: #008000;">ScriptTagProxy的用法几乎和HttpProxy一样，如下面的代码所示。</span></p>
<p><span style="font-size: medium; color: #008000;">var proxy = new Ext.data.ScriptTagProxy({url:'xxx.jsp'});&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></p>
<p><span style="font-size: medium; color: #008000;">从这里也看不出来它是如何支持跨域的，我们还需要在后台进行相应的处理，如下面的代码所示。</span></p>
<p><span style="font-size: medium; color: #008000;">String cb = request.getParameter("callback");</span></p>
<p><span style="font-size: medium; color: #008000;">response.setContentType("text/javascript");</span></p>
<p><span style="font-size: medium; color: #008000;">Writer out = response.getWriter();</span></p>
<p><span style="font-size: medium; color: #008000;">out.write(cb + "(");</span></p>
<p><span style="font-size: medium; color: #008000;">out.print("[" +</span></p>
<p><span style="font-size: medium; color: #008000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "['id1','name1','descn1']" +</span></p>
<p><span style="font-size: medium; color: #008000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "['id2','name2','descn2']" +</span></p>
<p><span style="font-size: medium; color: #008000;">&nbsp;&nbsp;&nbsp; "]");</span></p>
<p><span style="font-size: medium; color: #008000;">out.write(");");</span></p>
<p><span style="font-size: medium; color: #008000;">其中的关键就在于从请求中获
得的callback参数，这个参数叫做回调函数。ScriptTag- Proxy会在当前的HTML页面里添加一个&lt;script
type="text/javascript"src="xxx.jsp"&gt;
&lt;/script&gt;标签，然后把后台返回的内容添加到这个标签中，这样就可以解决跨域访问数据的问题。为了让后台返回的内容可以在动态生成的
标签中运行，EXT会生成一个名为callback的回调函数，并把回调函数的名称传递给后台，由后台生成callback(data)形式的响应内容，
然后返回给前台自动运行。</span></p>
<p><span style="font-size: medium; color: #008000;">虽然上述处理过程比较难理解，但是我们只需要了解ScriptTagProxy的用法就足够了。如果还想进一步了解ScriptTagProxy的运行过程，可以使用Firebug查看动态生成的HTML以及响应的JSON内容。</span></p>
<p><span style="font-size: medium; color: #008000;">最后我们来分析一下EXT的API文档中提供的示例，这段后台代码会自动判断请求的类型，返回支持ScriptTagProxy或HttpProxy的数据，如代码清单10-2所示。</span></p>
<p><span style="font-size: medium; color: #008000;">代码清单　在后台同时支持HttpProxy和ScriptTagProxy</span></p>
<p><span style="font-size: medium; color: #008000;">boolean scriptTag = false;</span></p>
<p><span style="font-size: medium; color: #008000;">String cb = request.getParameter("callback");</span></p>
<p><span style="font-size: medium; color: #008000;">if (cb != null) {</span></p>
<p><span style="font-size: medium; color: #008000;">&nbsp;&nbsp;&nbsp; scriptTag = true;</span></p>
<p><span style="font-size: medium; color: #008000;">&nbsp;&nbsp;&nbsp; response.setContentType("text/javascript");</span></p>
<p><span style="font-size: medium; color: #008000;">} else {</span></p>
<p><span style="font-size: medium; color: #008000;">&nbsp;&nbsp;&nbsp; response.setContentType("application/x-json");</span></p>
<p><span style="font-size: medium; color: #008000;">}</span></p>
<p><span style="font-size: medium; color: #008000;">Writer out = response.getWriter();</span></p>
<p><span style="font-size: medium; color: #008000;">if (scriptTag) {</span></p>
<p><span style="font-size: medium; color: #008000;">&nbsp;&nbsp;&nbsp; out.write(cb + "(");</span></p>
<p><span style="font-size: medium; color: #008000;">}</span></p>
<p><span style="font-size: medium; color: #008000;">out.print(dataBlock.toJsonString());</span></p>
<p><span style="font-size: medium; color: #008000;">if (scriptTag) {</span></p>
<p><span style="font-size: medium; color: #008000;">&nbsp;&nbsp;&nbsp; out.write(");");</span></p>
<p><span style="font-size: medium; color: #008000;">}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></p>
<p><span style="font-size: medium; color: #008000;">代码中通过判断请求中是否包含callback参数来决定返回何种数据类型。如果包含，就返回ScriptTagProxy需要的数据；否则，就当作HttpProxy处理。</span></p>
</div>
<img src ="http://www.blogjava.net/sealyu/aggbug/302707.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sealyu/" target="_blank">seal</a> 2009-11-17 14:57 <a href="http://www.blogjava.net/sealyu/archive/2009/11/17/302707.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ExtJS 开发总结 （转）</title><link>http://www.blogjava.net/sealyu/archive/2009/11/15/302412.html</link><dc:creator>seal</dc:creator><author>seal</author><pubDate>Sun, 15 Nov 2009 06:22:00 GMT</pubDate><guid>http://www.blogjava.net/sealyu/archive/2009/11/15/302412.html</guid><wfw:comment>http://www.blogjava.net/sealyu/comments/302412.html</wfw:comment><comments>http://www.blogjava.net/sealyu/archive/2009/11/15/302412.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sealyu/comments/commentRss/302412.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sealyu/services/trackbacks/302412.html</trackback:ping><description><![CDATA[<p>1. <strong>ExtJS的定位是RIA，和Prototype、jQuery等类库的定位不同</strong>。使用ExtJS做开发，就是意味着以客户端开发为主，不然就不叫RIA框架了，而Prototype、jQuery等只是辅助性的客户端框架，和ExtJS不在同一条起跑先上。如果一定要和其它的框架做比较的话，应该和<a href="http://www.smartclient.com/" target="_blank">Isomorphic SmartClient</a>、<a href="http://www.backbase.com/" target="_blank">Backbase Enterprise Ajax</a>之类的框架做比较，当然，和他们相比，ExtJS还是有很大的优势的。</p>
<p>2. <strong>使用ExtJS时需要解决如何服务端通信的问题</strong>。由于ExtJS只是一个客户端的框架，和服务端技术没有关系，也就没有相应的服务端的适配层，因此客户端如果要用ExtJS，则必须提供它需要的数据结构。ExtJS主要通过这几种方式和服务端进行通信： </p>
<ul>
    <li>
    <strong>Ext.Ajax.request</strong> 做普通的异步请求，服务端可以根据实际情况返回JSON形式数据或者HTML片段； </li>
    <li>
    <strong>Ext.tree.TreeLoader</strong> 加载树形结构，服务端必须返回JSON形式数据，而且要符合Ext.tree.TreeNode的配置要求，否则自己做转换； </li>
    <li>
    <strong>Ext.data.Store及其派生类</strong> 加载表格形式的数据，服务端可以根据实际情况返回JSON形式数据或者XML形式数据，如果没有特殊要求，推荐返回JSON格式的数据； </li>
    <li>
    <strong>Ext.Element.update</strong>
    局部更新，这个方法最总还是要调用Ext.Ajax.request方法，之所以把它单独列出来，是因为这种方式比较容易被忽视，但是在某些情况下还是挺
    有用的，比如调用Ext.Panel.body.update()对某个Ext.Panel的内容进行局部更新，如果使用这种方式，那么服务端只能相应的
    返回HTML片段了； </li>
</ul>
<p>3. <strong>使用ExtJS时的注意事项</strong>。ExtJS和其它的辅助性类库(Prototype、jQuery等)相比显得非常庞大，让很多很多初学者望而却步。经过近一年的学和用，对于ExtJS的使用，我总结了一下几个注意事项： </p>
<ul>
    <li>
    <strong>尽量使用ExtJS的方言</strong>。 ExtJS提供了很多有用的方法，解决客户端JavaScript常见的开发任务，常见的有查询HTMLDom，创建HTML元素，为HTML元素注册事件响应函数等，这些大可以全部使用ExtJS提供的方法，使自己代码构建与ExtJS之上，举几个例子：
    <ul>
        <li>查询ID为container的DIV下所有的checkbox，可以使用：<span style="color: #ff8000; font-family: Courier New;">Ext.fly(&#8216;container&#8217;).select(&#8216;input[type=checkbox]&#8217;);</span> </li>
        <li>在ID为container的DIV内创建一个按钮，可以使用：<span style="color: #ff8000; font-family: Courier New;">Ext.fly(&#8216;container&#8217;).createChild({ tag: &#8216;input&#8217;, type: &#8216;button&#8217;});</span> </li>
        <li>为ID为container的DIV的click事件注册处理函数，使用：<span style="color: #ff8000; font-family: Courier New;">Ext.fly(&#8216;container&#8217;).on(&#8216;click&#8217;, handlerFn, scope);</span> </li>
    </ul>
    </li>
    <li>
    <strong>ExtJS的自定义事件很好用</strong>，可以实现一对多的通知，而且任何自定义事件都可以中途停止，只要有一个处理函数返回false。 </li>
    <li>
    <strong>Store合并成一个文件</strong> 用ExtJS显示数据，自然就需要用到Ext.data.Store及其派生出来的类，可以考虑所有的Store合并到一个文件，这样对重用有很大的帮助。 </li>
    <li>
    <strong>脚本文件管理</strong> 尽可能的每个模块做成一个类，一个类一个文件，类似与Java或C# 的文件处理方法，每个文件注明其作用，依赖的文件等，如果太多的话可以考虑写一个配置文件，通过读配置文件来输出脚本到客户端。 </li>
    <li>
    <strong>调试和部署分别加载Debug和Release版本的脚本</strong> ExtJS附带的例子中没有使用完整Debug版本的例子，所以很多人找不到完整的Debug版本的引用顺序，通过对Source文件夹下的ext.jsb文件进行分析，就可以得到正确的加载顺序，如下：
    <ul>
        <li>Debug
        <ol>
            <li>/ext-path/source/core/ext.js </li>
            <li>/ext-path/source/adapter/ext-base.js </li>
            <li>/ext-path/ext-all-debug.js </li>
        </ol>
        </li>
        <li>Release
        <ol>
            <li>/ext-path/adapter/ext/ext-base.js </li>
            <li>/ext-path/ext-all.js </li>
        </ol>
        </li>
    </ul>
    </li>
    <li>
    <strong>对Script进行压缩</strong> 对项目中有大量的JavaScript的话，对其进行压缩是很有必要的，这里我推荐的是ExtJS的论坛提供的<a href="http://extjs.com/forum/showthread.php?t=7490" target="_blank">JS Builder</a>，可以通过配置文件来对Script和CSS进行压缩，据说ExtJS就是用这个工具进行压缩的，不过有一个缺点，就是不支持UTF-8编码。 </li>
</ul>
<p>4. <strong>ExtJS的优点和缺点总结</strong>。经过近一年的尝试，ExtJS的优缺点总结如下： </p>
<ul>
    <li>优点
    <ul>
        <li>
        <strong>一致的类库</strong> 这点在1.1版本时还不是很完善，但是到了2.0以后，ExtJS内部经过了翻天覆地的变化，特别是UI组件，有统一的基类，给人的感觉很像是一个运行在浏览器上的运行时框架，这一点只有在对ExtJS熟练了之后才能体会到。 </li>
        <li>&nbsp;<strong>托管页面呈现</strong> ExtJS在发展到2.0之后，不仅UI类库一致了，而且渲染方式也是统一的，用官方的话说，是Managed Rendering，这一点使得UI的扩展也比较一致，有利于以后的维护与发展。 </li>
        <li>
        <strong>相对丰富的文档和示例</strong> 毫无疑问，刚刚接触到ExtJS的人多数都是被它附带的例子和开发文档吸引过去的，它的文档做的确实不错。 </li>
        <li>
        <strong>华丽而成熟的界面</strong> ExtJS在2.0之后的界面真的是没得说，不仅华丽，而且相对很成熟。 </li>
    </ul>
    </li>
    <li>缺点
    <ul>
        <li>
        <strong>没有合适的开发利器</strong> 毫无疑问，一个好的开发工具可以大大的提高编码的速度，但是对于ExtJS，始终没有一个完美的开发工具，可以推荐的有<a href="http://www.aptana.com/" target="_blank">Aptana Studio</a>， <a href="http://www.spket.com/" target="_blank">Spket IDE</a>，和<a href="http://www.spket.com/ext-intellisense-visual-studio.html" target="_blank">Spket 提供的提示文件</a>，但是都是各有优缺点，都不完美，只能一边看SDK一边写代码。 </li>
        <li>
        <strong>没有界面设计工具</strong> 虽然有人提供了一个<a href="http://www.tof2k.com/ext/formbuilder/" target="_blank">在线的界面设计工具</a>，但是和Visual Studio提供的ASP.Net设计工具来说，真的可以说是天壤之别。因此，只能一边预览，一边写代码。 </li>
        <li>
        <strong>文档不全</strong> 虽然ExtJS提供的文档很丰富，但是还是跟不上源代码的更新速度，所以，经常要通过看源代码，调试才能真正解决问题。 </li>
        <li>
        <strong>不能编译</strong> 这一点可以说是JavaScript的缺点（如果能编译，就不叫JavaScript了），在实际的开发中，经常会敲错一些代码，比如大小写错误等，不能通过编译得到反馈，只能在运行时排错，导致开发的效率比较低下。 </li>
    </ul>
    </li>
</ul>
<p>5. <strong>使用ExtJS做应用的一些建议</strong>。多数人认为ExtJS的脚本体积很大，不适合放到互联网上，对于这一点，有如下建议： </p>
<ol>
    <li>部署到互联网上的Web应用一定要加载Release版本的ExtJS </li>
    <li>可以考虑只加载必须的组件，build目录下脚本文件都是压缩过的，如果项目中用到的ExtJS的组件不是很多，可以只加载用到的 </li>
    <li>考虑使用IIS的文件压缩功能 </li>
    <li>使用Google的Gears，把所有的静态文件做客户端缓存 </li>
    <li>使用ADOBE的AIR，把脚本打包到客户端运行 </li>
</ol>
<p>总的来说，ExtJS是一个不错的框架，它陪伴我走过了精彩的2008，也许在未来的2009，我会转向其它的RIA技术，但是我至少会继续关注ExtJS，同时也希望这个框架能够顽强的生存下去。</p>
<p>PS，共享一些学习资料：</p>
<ul>
    <li>
    <a href="http://extjs.com/learn/Tutorial:Introduction_to_Ext_2.0_%28Chinese%29" target="_blank">ExtJS 2.0 简介</a> （推荐反复阅读，细细体会） </li>
    <li>
    <a href="http://extjs-ux.org/" target="_blank">ExtJS的用户扩展合集</a> （推荐常去看看） </li>
    <li>
    <a href="http://extjs.com/learn/Tutorial:Writing_a_Big_Application_in_Ext" target="_blank">如何用ExtJS构建大型应用</a> （可以说是做ExtJS开发的指导思想） </li>
    <li>
    <a href="http://files.cnblogs.com/beginor/Ext-2.0-class-map.zip" target="_blank">ExtJS 2.0 类库的脑图</a> （可以加深对ExtJS类库的继承关系的理解）</li>
</ul>
<img src ="http://www.blogjava.net/sealyu/aggbug/302412.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sealyu/" target="_blank">seal</a> 2009-11-15 14:22 <a href="http://www.blogjava.net/sealyu/archive/2009/11/15/302412.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>