﻿<?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-Hibernating-随笔分类-ExtJs</title><link>http://www.blogjava.net/redhatlinux/category/35463.html</link><description>业精于勤荒于嬉,行成于思毁于随
Spring,SpringSecurity,Quartz,Hibernate,Struts</description><language>zh-cn</language><lastBuildDate>Wed, 11 Feb 2009 16:18:34 GMT</lastBuildDate><pubDate>Wed, 11 Feb 2009 16:18:34 GMT</pubDate><ttl>60</ttl><item><title>【转载】解决有关Ext Grid导出Excel在JSP等环境中不可用的问题</title><link>http://www.blogjava.net/redhatlinux/archive/2009/02/11/254236.html</link><dc:creator>Hibernating</dc:creator><author>Hibernating</author><pubDate>Wed, 11 Feb 2009 05:31:00 GMT</pubDate><guid>http://www.blogjava.net/redhatlinux/archive/2009/02/11/254236.html</guid><wfw:comment>http://www.blogjava.net/redhatlinux/comments/254236.html</wfw:comment><comments>http://www.blogjava.net/redhatlinux/archive/2009/02/11/254236.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/redhatlinux/comments/commentRss/254236.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/redhatlinux/services/trackbacks/254236.html</trackback:ping><description><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="font-size: 14pt; color: #d65656; font-family: 隶书">&nbsp;解决有关Ext Grid导出Excel在JSP等环境中不可用的问题</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 有关ExtGrid导出Excel的实现方式，网上已经有很多，官方也给出了一个方案，代码不是很完善，不过已经有高人对这个进行了修正。具体实现方式及代码我这里就不再多说了，大家可以参看：<br />
<a href="http://www.dojochina.com/index.php?q=node/1254">http://www.dojochina.com/index.php?q=node/1254</a>，附件：<a href="/Files/redhatlinux/gridToExcel.js.txt">gridToExcel.js.txt</a><br />
<strong>其基本思想是：</strong>客户端根据Grid数据生成Excel格式的XML数据，然后发送到一个服务端文件，服务端文件通<br />
过设定Content-Type来实现Excel的下载。其中&#8220;导出Excel&#8221;按钮点击执行的代码如下：</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008080">&nbsp;1</span><img id="Codehighlighter1_78_595_Open_Image" onclick="this.style.display='none'; Codehighlighter1_78_595_Open_Text.style.display='none'; Codehighlighter1_78_595_Closed_Image.style.display='inline'; Codehighlighter1_78_595_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_78_595_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_78_595_Closed_Text.style.display='none'; Codehighlighter1_78_595_Open_Image.style.display='inline'; Codehighlighter1_78_595_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(Ext.isIE6&nbsp;</span><span style="color: #000000">||</span><span style="color: #000000">&nbsp;Ext.isIE7&nbsp;</span><span style="color: #000000">||</span><span style="color: #000000">&nbsp;Ext.isSafari&nbsp;</span><span style="color: #000000">||</span><span style="color: #000000">&nbsp;Ext.isSafari2&nbsp;</span><span style="color: #000000">||</span><span style="color: #000000">&nbsp;Ext.isSafari3)&nbsp;</span><span id="Codehighlighter1_78_595_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_78_595_Open_Text"><span style="color: #000000">{&nbsp;<br />
</span><span style="color: #008080">&nbsp;2</span><span style="color: #000000"><img id="Codehighlighter1_112_302_Open_Image" onclick="this.style.display='none'; Codehighlighter1_112_302_Open_Text.style.display='none'; Codehighlighter1_112_302_Closed_Image.style.display='inline'; Codehighlighter1_112_302_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_112_302_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_112_302_Closed_Text.style.display='none'; Codehighlighter1_112_302_Open_Image.style.display='inline'; Codehighlighter1_112_302_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(</span><span style="color: #000000">!</span><span style="color: #000000">&nbsp;Ext.fly('frmDummy'))&nbsp;</span><span id="Codehighlighter1_112_302_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_112_302_Open_Text"><span style="color: #000000">{&nbsp;<br />
</span><span style="color: #008080">&nbsp;3</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;frm&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;document.createElement('form');&nbsp;<br />
</span><span style="color: #008080">&nbsp;4</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;frm.id&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;'frmDummy';&nbsp;<br />
</span><span style="color: #008080">&nbsp;5</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;frm.name&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;id;&nbsp;<br />
</span><span style="color: #008080">&nbsp;6</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;frm.className&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;'x</span><span style="color: #000000">-</span><span style="color: #000000">hidden';&nbsp;<br />
</span><span style="color: #008080">&nbsp;7</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;document.body.appendChild(frm);&nbsp;<br />
</span><span style="color: #008080">&nbsp;8</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;<br />
</span><span style="color: #008080">&nbsp;9</span><span style="color: #000000"><img id="Codehighlighter1_326_591_Open_Image" onclick="this.style.display='none'; Codehighlighter1_326_591_Open_Text.style.display='none'; Codehighlighter1_326_591_Closed_Image.style.display='inline'; Codehighlighter1_326_591_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_326_591_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_326_591_Closed_Text.style.display='none'; Codehighlighter1_326_591_Open_Image.style.display='inline'; Codehighlighter1_326_591_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;Ext.Ajax.request(</span><span id="Codehighlighter1_326_591_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_326_591_Open_Text"><span style="color: #000000">{&nbsp;<br />
</span><span style="color: #008080">10</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;url:&nbsp;'</span><span style="color: #000000">/</span><span style="color: #000000">exportexcel.php',&nbsp;<br />
</span><span style="color: #008080">11</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;method:&nbsp;'POST',&nbsp;<br />
</span><span style="color: #008080">12</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;form:&nbsp;Ext.fly('frmDummy'),&nbsp;<br />
</span><span style="color: #008080">13</span><span style="color: #000000"><img id="Codehighlighter1_460_509_Open_Image" onclick="this.style.display='none'; Codehighlighter1_460_509_Open_Text.style.display='none'; Codehighlighter1_460_509_Closed_Image.style.display='inline'; Codehighlighter1_460_509_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_460_509_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_460_509_Closed_Text.style.display='none'; Codehighlighter1_460_509_Open_Image.style.display='inline'; Codehighlighter1_460_509_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;callback:&nbsp;</span><span style="color: #0000ff">function</span><span style="color: #000000">(o,&nbsp;s,&nbsp;r)&nbsp;</span><span id="Codehighlighter1_460_509_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_460_509_Open_Text"><span style="color: #000000">{&nbsp;<br />
</span><span style="color: #008080">14</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">alert(r.responseText);&nbsp;</span><span style="color: #008000"><br />
</span><span style="color: #008080">15</span><span style="color: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">,&nbsp;<br />
</span><span style="color: #008080">16</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;isUpload:&nbsp;</span><span style="color: #0000ff">true</span><span style="color: #000000">,&nbsp;<br />
</span><span style="color: #008080">17</span><span style="color: #000000"><img id="Codehighlighter1_554_584_Open_Image" onclick="this.style.display='none'; Codehighlighter1_554_584_Open_Text.style.display='none'; Codehighlighter1_554_584_Closed_Image.style.display='inline'; Codehighlighter1_554_584_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_554_584_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_554_584_Closed_Text.style.display='none'; Codehighlighter1_554_584_Open_Image.style.display='inline'; Codehighlighter1_554_584_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;params:&nbsp;</span><span id="Codehighlighter1_554_584_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_554_584_Open_Text"><span style="color: #000000">{exportContent:&nbsp;vExportContent}</span></span><span style="color: #000000">&nbsp;<br />
</span><span style="color: #008080">18</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">)&nbsp;<br />
</span><span style="color: #008080">19</span><span style="color: #000000"><img id="Codehighlighter1_602_703_Open_Image" onclick="this.style.display='none'; Codehighlighter1_602_703_Open_Text.style.display='none'; Codehighlighter1_602_703_Closed_Image.style.display='inline'; Codehighlighter1_602_703_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_602_703_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_602_703_Closed_Text.style.display='none'; Codehighlighter1_602_703_Open_Image.style.display='inline'; Codehighlighter1_602_703_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" />}</span></span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000">&nbsp;</span><span id="Codehighlighter1_602_703_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_602_703_Open_Text"><span style="color: #000000">{&nbsp;<br />
</span><span style="color: #008080">20</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;document.location&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;'data:application</span><span style="color: #000000">/</span><span style="color: #000000">vnd.ms</span><span style="color: #000000">-</span><span style="color: #000000">excel;base64,'&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;Base64.encode(vExportContent);&nbsp;<br />
</span><span style="color: #008080">21</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span></div>
<p>例子中服务端使用的PHP，这段代码在PHP中可能可以很好的工作，但是如果到了JSP等环境下，就出现了问<br />
题，导出数据可能是空。<br />
&nbsp;问题出在哪里呢？上面这部分代码中的ajax提交其实并不是真正的ajax提交，因为ajax提交是在后台执行，因<br />
此不可能实现下载，可以看到这里有form和isUpload两个参数：Ext的ajax请求中如果配置了isUpload:true，则其<br />
ajax就不是真正的ajax请求，而是通过创建一个隐藏的Iframe，并通过form的target指向这个iframe来提交数据，并<br />
且发送的header里将content-type设为了multipart/form，在JSP中不能成功导出的原因就在这里。这样的提交方式<br />
其参数通过request.getParameter是取不到的，当然你可以使用上传组件来获取，但这样代码就变得复杂。下面<br />
来解决这个问题，既然这里的Ajax使用是一个模拟的form提交，那我们其实可以完全不用。我们直接用form提<br />
交不是更省事吗？解决办法如下：创建一个隐藏form，其target设置为_blank，然后在其内部创建一个隐藏域存<br />
放xml数据，然后通过POST方式提交这个form即可。</p>
<p>实现代码：</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008080">&nbsp;1</span><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;vExportContent&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;grid.getExcelXml();&nbsp;<br />
</span><span style="color: #008080">&nbsp;2</span><span style="color: #000000"><img id="Codehighlighter1_120_527_Open_Image" onclick="this.style.display='none'; Codehighlighter1_120_527_Open_Text.style.display='none'; Codehighlighter1_120_527_Closed_Image.style.display='inline'; Codehighlighter1_120_527_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_120_527_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_120_527_Closed_Text.style.display='none'; Codehighlighter1_120_527_Open_Image.style.display='inline'; Codehighlighter1_120_527_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(Ext.isIE6&nbsp;</span><span style="color: #000000">||</span><span style="color: #000000">&nbsp;Ext.isIE7&nbsp;</span><span style="color: #000000">||</span><span style="color: #000000">&nbsp;Ext.isSafari&nbsp;</span><span style="color: #000000">||</span><span style="color: #000000">&nbsp;Ext.isSafari2&nbsp;</span><span style="color: #000000">||</span><span style="color: #000000">&nbsp;Ext.isSafari3)&nbsp;</span><span id="Codehighlighter1_120_527_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_120_527_Open_Text"><span style="color: #000000">{&nbsp;<br />
</span><span style="color: #008080">&nbsp;3</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;fd</span><span style="color: #000000">=</span><span style="color: #000000">Ext.get('frmDummy');&nbsp;<br />
</span><span style="color: #008080">&nbsp;4</span><span style="color: #000000"><img id="Codehighlighter1_169_441_Open_Image" onclick="this.style.display='none'; Codehighlighter1_169_441_Open_Text.style.display='none'; Codehighlighter1_169_441_Closed_Image.style.display='inline'; Codehighlighter1_169_441_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_169_441_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_169_441_Closed_Text.style.display='none'; Codehighlighter1_169_441_Open_Image.style.display='inline'; Codehighlighter1_169_441_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(</span><span style="color: #000000">!</span><span style="color: #000000">fd)&nbsp;</span><span id="Codehighlighter1_169_441_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_169_441_Open_Text"><span style="color: #000000">{&nbsp;<br />
</span><span style="color: #008080">&nbsp;5</span><span style="color: #000000"><img id="Codehighlighter1_218_427_Open_Image" onclick="this.style.display='none'; Codehighlighter1_218_427_Open_Text.style.display='none'; Codehighlighter1_218_427_Closed_Image.style.display='inline'; Codehighlighter1_218_427_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_218_427_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_218_427_Closed_Text.style.display='none'; Codehighlighter1_218_427_Open_Image.style.display='inline'; Codehighlighter1_218_427_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fd</span><span style="color: #000000">=</span><span style="color: #000000">Ext.DomHelper.append(Ext.getBody(),</span><span id="Codehighlighter1_218_427_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_218_427_Open_Text"><span style="color: #000000">{tag:'form',method:'post',id:'frmDummy',action:'exportexcel.jsp',&nbsp;target:'_blank',name:'frmDummy',cls:'x</span><span style="color: #000000">-</span><span style="color: #000000">hidden',cn:[&nbsp;<br />
</span><span style="color: #008080">&nbsp;6</span><span style="color: #000000"><img id="Codehighlighter1_349_415_Open_Image" onclick="this.style.display='none'; Codehighlighter1_349_415_Open_Text.style.display='none'; Codehighlighter1_349_415_Closed_Image.style.display='inline'; Codehighlighter1_349_415_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_349_415_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_349_415_Closed_Text.style.display='none'; Codehighlighter1_349_415_Open_Image.style.display='inline'; Codehighlighter1_349_415_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_349_415_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_349_415_Open_Text"><span style="color: #000000">{tag:'input',name:'exportContent',id:'exportContent',type:'hidden'}</span></span><span style="color: #000000">&nbsp;<br />
</span><span style="color: #008080">&nbsp;7</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;]}</span></span><span style="color: #000000">,</span><span style="color: #0000ff">true</span><span style="color: #000000">);&nbsp;<br />
</span><span style="color: #008080">&nbsp;8</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;<br />
</span><span style="color: #008080">&nbsp;9</span><span style="color: #000000"><img id="Codehighlighter1_479_500_Open_Image" onclick="this.style.display='none'; Codehighlighter1_479_500_Open_Text.style.display='none'; Codehighlighter1_479_500_Closed_Image.style.display='inline'; Codehighlighter1_479_500_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_479_500_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_479_500_Closed_Text.style.display='none'; Codehighlighter1_479_500_Open_Image.style.display='inline'; Codehighlighter1_479_500_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;fd.child('#exportContent').set(</span><span id="Codehighlighter1_479_500_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_479_500_Open_Text"><span style="color: #000000">{value:vExportContent}</span></span><span style="color: #000000">);&nbsp;<br />
</span><span style="color: #008080">10</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;fd.dom.submit();&nbsp;<br />
</span><span style="color: #008080">11</span><span style="color: #000000"><img id="Codehighlighter1_534_633_Open_Image" onclick="this.style.display='none'; Codehighlighter1_534_633_Open_Text.style.display='none'; Codehighlighter1_534_633_Closed_Image.style.display='inline'; Codehighlighter1_534_633_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_534_633_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_534_633_Closed_Text.style.display='none'; Codehighlighter1_534_633_Open_Image.style.display='inline'; Codehighlighter1_534_633_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" />}</span></span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000">&nbsp;</span><span id="Codehighlighter1_534_633_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_534_633_Open_Text"><span style="color: #000000">{&nbsp;<br />
</span><span style="color: #008080">12</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;document.location&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;'data:application</span><span style="color: #000000">/</span><span style="color: #000000">vnd.ms</span><span style="color: #000000">-</span><span style="color: #000000">excel;base64,'</span><span style="color: #000000">+</span><span style="color: #000000">Base64.encode(vExportContent);&nbsp;<br />
</span><span style="color: #008080">13</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000">}&nbsp;<br />
</span><span style="color: #008080">14</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<p>JSP代码：<br />
</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008080">1</span><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">&lt;%</span><span style="color: #000000">&nbsp;&nbsp;<br />
</span><span style="color: #008080">2</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />response.setHeader(</span><span style="color: #000000">"</span><span style="color: #000000">Content-Type</span><span style="color: #000000">"</span><span style="color: #000000">,</span><span style="color: #000000">"</span><span style="color: #000000">application/force-download</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;<br />
</span><span style="color: #008080">3</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />response.setHeader(</span><span style="color: #000000">"</span><span style="color: #000000">Content-Type</span><span style="color: #000000">"</span><span style="color: #000000">,</span><span style="color: #000000">"</span><span style="color: #000000">application/vnd.ms-excel</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;<br />
</span><span style="color: #008080">4</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />response.setHeader(</span><span style="color: #000000">"</span><span style="color: #000000">Content-Disposition</span><span style="color: #000000">"</span><span style="color: #000000">,</span><span style="color: #000000">"</span><span style="color: #000000">attachment;filename=export.xls</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;<br />
</span><span style="color: #008080">5</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />out.print(request.getParameter(</span><span style="color: #000000">"</span><span style="color: #000000">exportContent</span><span style="color: #000000">"</span><span style="color: #000000">));&nbsp;<br />
</span><span style="color: #008080">6</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">%&gt;</span></div>
<p><br />
&nbsp;完整代码下载：<a href="/Files/redhatlinux/grid2excel.rar">grid2excel.rar</a></p>
<img src ="http://www.blogjava.net/redhatlinux/aggbug/254236.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/redhatlinux/" target="_blank">Hibernating</a> 2009-02-11 13:31 <a href="http://www.blogjava.net/redhatlinux/archive/2009/02/11/254236.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【转载】Ext.get()与Ext.fly()之区别</title><link>http://www.blogjava.net/redhatlinux/archive/2009/02/11/254220.html</link><dc:creator>Hibernating</dc:creator><author>Hibernating</author><pubDate>Wed, 11 Feb 2009 03:51:00 GMT</pubDate><guid>http://www.blogjava.net/redhatlinux/archive/2009/02/11/254220.html</guid><wfw:comment>http://www.blogjava.net/redhatlinux/comments/254220.html</wfw:comment><comments>http://www.blogjava.net/redhatlinux/archive/2009/02/11/254220.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/redhatlinux/comments/commentRss/254220.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/redhatlinux/services/trackbacks/254220.html</trackback:ping><description><![CDATA[<p align="center"><span style="font-size: 18pt; font-family: 隶书">Ext.get()与Ext.fly()之区别</span><br />
从一开始接触Ext就看到有Ext.fly这个函数，当时觉得这个跟Ext.get没什么区别，加之当时对JS性能相关<br />
问题认识肤浅，也一直没有在意其区别，今日看learning extjs一书，看到了有专门对Ext.fly特别强调的一处：<br />
</p>
<p class="code"><code><strong>This&nbsp;isn't&nbsp;exactly&nbsp;a&nbsp;speed&nbsp;tip,&nbsp;but&nbsp;is&nbsp;more&nbsp;about&nbsp;conserving&nbsp;memory&nbsp;by&nbsp;using&nbsp;something&nbsp;called&nbsp;<br />
a&nbsp;"flyweight"&nbsp;to&nbsp;perform&nbsp;simple&nbsp;tasks,&nbsp;which&nbsp;results&nbsp;in&nbsp;higher&nbsp;speed&nbsp;by&nbsp;not&nbsp;clogging&nbsp;up&nbsp;the&nbsp;<br />
browser's&nbsp;memory</strong><br />
</code></p>
<p>大概意思也就是Ext.Fly采用flyweight模式使所有fly出来的元素共享内存，可以提高程序执行速度，减少内存占用。<br />
</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这段话激起了我对这个函数的兴趣，毕竟近段时间一直在搞JS性能优化相关问题，对&#8220;内存&#8221;这个字眼<br />
非常敏感。大概看了下Ext源码对get和fly实现的部分，然后在网上查看了一些资料，终于对他们之间的异同有<br />
了个比较深入的认识。<br />
Ext的官方开发人员给出了如下的解释：<br />
</p>
<p class="code"><code><strong>Ext.Element&nbsp;wraps&nbsp;a&nbsp;lot&nbsp;of&nbsp;functionality&nbsp;around&nbsp;DOM&nbsp;element/node,&nbsp;for&nbsp;example&nbsp;functions&nbsp;like&nbsp;hide,&nbsp;show,&nbsp;<br />
all&nbsp;animation&nbsp;stuff,&nbsp;dimensions&nbsp;getting&nbsp;and&nbsp;setting&nbsp;function&nbsp;and&nbsp;a&nbsp;lot&nbsp;more.&nbsp;<br />
<br />
Ext.Element&nbsp;keeps&nbsp;reference&nbsp;to&nbsp;DOM&nbsp;element&nbsp;it&nbsp;is&nbsp;wrapped&nbsp;around&nbsp;in&nbsp;dom&nbsp;property.&nbsp;Once&nbsp;you&nbsp;have&nbsp;an&nbsp;Ext.Element<br />
&nbsp;(e.g.&nbsp;you&nbsp;call&nbsp;Ext.get('some-d')&nbsp;it&nbsp;is&nbsp;an&nbsp;instance&nbsp;of&nbsp;Element&nbsp;class&nbsp;and&nbsp;you&nbsp;can&nbsp;work&nbsp;with&nbsp;it&nbsp;as&nbsp;such.&nbsp;<br />
<br />
Now,&nbsp;imagine&nbsp;that&nbsp;you&nbsp;need&nbsp;to&nbsp;hide&nbsp;1000&nbsp;DOM&nbsp;nodes,&nbsp;you&nbsp;call&nbsp;1000&nbsp;times&nbsp;Ext.get('some-one-of-<br />
1000-id').hide()&nbsp;so&nbsp;you&nbsp;create&nbsp;1000&nbsp;instances&nbsp;of&nbsp;Element&nbsp;just&nbsp;to&nbsp;call&nbsp;one&nbsp;function:&nbsp;hide.&nbsp;<br />
<br />
Ext.fly&nbsp;is&nbsp;one&nbsp;instance&nbsp;of&nbsp;Ext.Element&nbsp;with&nbsp;"replaceable"&nbsp;DOM&nbsp;node&nbsp;it&nbsp;is&nbsp;wrapped&nbsp;around.&nbsp;<br />
If&nbsp;you&nbsp;call&nbsp;1000&nbsp;times&nbsp;Ext.fly('some-one-of-1000-id').hide()&nbsp;you&nbsp;1000&nbsp;times&nbsp;replace&nbsp;dom&nbsp;property&nbsp;of&nbsp;one&nbsp;instance&nbsp;of&nbsp;Ext.Element.&nbsp;<br />
<br />
Result:&nbsp;higher&nbsp;performance,&nbsp;lower&nbsp;memory&nbsp;usage.&nbsp;<br />
<br />
You&nbsp;only&nbsp;need&nbsp;to&nbsp;keep&nbsp;in&nbsp;mind&nbsp;that&nbsp;you&nbsp;cannot&nbsp;keep&nbsp;Element&nbsp;returned&nbsp;by&nbsp;Ext.fly&nbsp;for&nbsp;later&nbsp;use&nbsp;as&nbsp;<br />
it's&nbsp;dom&nbsp;will&nbsp;sooner&nbsp;or&nbsp;later&nbsp;gets&nbsp;replaced&nbsp;by&nbsp;another&nbsp;one.<br />
</strong></code></p>
<p><strong>这段话中，大致的意思如下：<br />
</strong></p>
<p>Ext.Element是Ext对Dom元素的一个强有力封装，它封装了很多方便对dom操作的接口(并通过Element的dom属性<br />
引用对应的dom元素)，因此每创建一个Element元素都将消耗不少的内存(主要是大量的操作接口消耗)，因此如<br />
果创建过多的Element元素必然导致内存占用的剧增和系统性能的下降。<br />
</p>
<p>Ext.get和Ext.fly返回的都是一个Element对象，但是Ext.get返回的是一个独立的Element，拥有自己独立的操作接口<br />
封装，可以将其返回值保存到变量中，以便以后调用操作等，这样为重用带来了方便。但是它的一个很大缺<br />
点就是内存消耗问题，假如调用Ext.get(id)1000次，则会在内存中创建1000个独立Element，其内存占用可想而<br />
知。但是很多时候我们可能仅仅只是对该dom元素执行一次很简单的操作，如隐藏(hide)，这样如果每次都创建<br />
一个独立Element放在内存中，实在是对内存的巨大浪费，因此当我们在只需要执行一次操作或者一个很简单<br />
的操作时，采用Ext.get就显得很不合理。Ext.fly正是为了解决这个问题而出现，它通过使每次创建的Element共<br />
享内存中的一套操作接口来达到节省内存的效果。</p>
<p><strong>下面来看Ext.fly的实现代码(我简单加了一些注释)：<br />
</strong></p>
<pre jquery1234322781687="5">
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008080">&nbsp;1</span><img id="Codehighlighter1_22_23_Open_Image" onclick="this.style.display='none'; Codehighlighter1_22_23_Open_Text.style.display='none'; Codehighlighter1_22_23_Closed_Image.style.display='inline'; Codehighlighter1_22_23_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_22_23_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_22_23_Closed_Text.style.display='none'; Codehighlighter1_22_23_Open_Image.style.display='inline'; Codehighlighter1_22_23_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;flyFn&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">function</span><span style="color: #000000">()</span><span id="Codehighlighter1_22_23_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_22_23_Open_Text"><span style="color: #000000">{}</span></span><span style="color: #000000">;&nbsp;<br />
</span><span style="color: #008080">&nbsp;2</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />flyFn.prototype&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;El.prototype;&nbsp;<br />
</span><span style="color: #008080">&nbsp;3</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;_cls&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;flyFn();&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">将Element的所有操作接口放在_cls中&nbsp;</span><span style="color: #008000"><br />
</span><span style="color: #008080">&nbsp;4</span><span style="color: #008000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000">&nbsp;<br />
</span><span style="color: #008080">&nbsp;5</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;dom&nbsp;is&nbsp;optional&nbsp;</span><span style="color: #008000"><br />
</span><span style="color: #008080">&nbsp;6</span><span style="color: #008000"><img id="Codehighlighter1_160_184_Open_Image" onclick="this.style.display='none'; Codehighlighter1_160_184_Open_Text.style.display='none'; Codehighlighter1_160_184_Closed_Image.style.display='inline'; Codehighlighter1_160_184_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_160_184_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_160_184_Closed_Text.style.display='none'; Codehighlighter1_160_184_Open_Image.style.display='inline'; Codehighlighter1_160_184_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="color: #000000">El.Flyweight&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">function</span><span style="color: #000000">(dom)</span><span id="Codehighlighter1_160_184_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_160_184_Open_Text"><span style="color: #000000">{&nbsp;<br />
</span><span style="color: #008080">&nbsp;7</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.dom&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;dom;&nbsp;<br />
</span><span style="color: #008080">&nbsp;8</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="color: #000000">;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">仅包含一个dom属性的Object&nbsp;</span><span style="color: #008000"><br />
</span><span style="color: #008080">&nbsp;9</span><span style="color: #008000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000">&nbsp;<br />
</span><span style="color: #008080">10</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />El.Flyweight.prototype&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;_cls;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">将操作接口复制给Element实例对象&nbsp;</span><span style="color: #008000"><br />
</span><span style="color: #008080">11</span><span style="color: #008000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000">El.Flyweight.prototype.isFlyweight&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">true</span><span style="color: #000000">;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">标志该Element是flyweight对象&nbsp;</span><span style="color: #008000"><br />
</span><span style="color: #008080">12</span><span style="color: #008000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000">&nbsp;<br />
</span><span style="color: #008080">13</span><span style="color: #000000"><img id="Codehighlighter1_352_353_Open_Image" onclick="this.style.display='none'; Codehighlighter1_352_353_Open_Text.style.display='none'; Codehighlighter1_352_353_Closed_Image.style.display='inline'; Codehighlighter1_352_353_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_352_353_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_352_353_Closed_Text.style.display='none'; Codehighlighter1_352_353_Open_Image.style.display='inline'; Codehighlighter1_352_353_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />El._flyweights&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span id="Codehighlighter1_352_353_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_352_353_Open_Text"><span style="color: #000000">{}</span></span><span style="color: #000000">;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">flyweight对象缓存容器&nbsp;</span><span style="color: #008000"><br />
</span><span style="color: #008080">14</span><span style="color: #008000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000">&nbsp;<br />
</span><span style="color: #008080">15</span><span style="color: #000000"><img id="Codehighlighter1_405_747_Open_Image" onclick="this.style.display='none'; Codehighlighter1_405_747_Open_Text.style.display='none'; Codehighlighter1_405_747_Closed_Image.style.display='inline'; Codehighlighter1_405_747_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_405_747_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_405_747_Closed_Text.style.display='none'; Codehighlighter1_405_747_Open_Image.style.display='inline'; Codehighlighter1_405_747_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />El.fly&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">function</span><span style="color: #000000">(el,&nbsp;named)</span><span id="Codehighlighter1_405_747_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_405_747_Open_Text"><span style="color: #000000">{&nbsp;<br />
</span><span style="color: #008080">16</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;named&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;named&nbsp;</span><span style="color: #000000">||</span><span style="color: #000000">&nbsp;'_global';&nbsp;<br />
</span><span style="color: #008080">17</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;el&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Ext.getDom(el);&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">取得dom对象&nbsp;</span><span style="color: #008000"><br />
</span><span style="color: #008080">18</span><span style="color: #008000"><img id="Codehighlighter1_488_517_Open_Image" onclick="this.style.display='none'; Codehighlighter1_488_517_Open_Text.style.display='none'; Codehighlighter1_488_517_Closed_Image.style.display='inline'; Codehighlighter1_488_517_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_488_517_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_488_517_Closed_Text.style.display='none'; Codehighlighter1_488_517_Open_Image.style.display='inline'; Codehighlighter1_488_517_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(</span><span style="color: #000000">!</span><span style="color: #000000">el)</span><span id="Codehighlighter1_488_517_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_488_517_Open_Text"><span style="color: #000000">{&nbsp;<br />
</span><span style="color: #008080">19</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">;&nbsp;<br />
</span><span style="color: #008080">20</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;<br />
</span><span style="color: #008080">21</span><span style="color: #000000"><img id="Codehighlighter1_550_646_Open_Image" onclick="this.style.display='none'; Codehighlighter1_550_646_Open_Text.style.display='none'; Codehighlighter1_550_646_Closed_Image.style.display='inline'; Codehighlighter1_550_646_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_550_646_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_550_646_Closed_Text.style.display='none'; Codehighlighter1_550_646_Open_Image.style.display='inline'; Codehighlighter1_550_646_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(</span><span style="color: #000000">!</span><span style="color: #000000">El._flyweights[named])</span><span id="Codehighlighter1_550_646_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_550_646_Open_Text"><span style="color: #000000">{&nbsp;<br />
</span><span style="color: #008080">22</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;El._flyweights[named]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;El.Flyweight();&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">仅在第一次调用Ext.fly时创建一个Flyweight对象并缓存&nbsp;</span><span style="color: #008000"><br />
</span><span style="color: #008080">23</span><span style="color: #008000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;<br />
</span><span style="color: #008080">24</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;El._flyweights[named].dom&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;el;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">将flyweight对象的dom属性指向该el&nbsp;</span><span style="color: #008000"><br />
</span><span style="color: #008080">25</span><span style="color: #008000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;El._flyweights[named];&nbsp;<br />
</span><span style="color: #008080">26</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="color: #000000">;</span></div>
<br />
从上面的代码不难看出，仅在第一次调用Ext.fly时创建一个Flyweight对象（该对象包含了Element的所有操作接口）并将其缓存，</pre>
<p>之后的所有fly操作都只是修改该flyweight对象的dom属性，每次fly返回的结果都是共享的同一个flyweight对象。<br />
这样每次fly返回的Element相比Ext.get而言，减少了每次创建Element时对大量的操作接口的创建。所有fly的对象<br />
都共享一套Element操作接口，内存占用自然少了很多，而且执行速度也得到了提升。在大量的创建操作中效<br />
果会更加明显。</p>
<p>由于fly的操作原理，我们不能将fly的返回结果保存在变量中以便重用，因为每次fly操作都将可能改变该变量的<br />
dom指向。如下面的代码就是不正确的：<br />
</p>
<pre jquery1234322781687="11">
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008080">1</span><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;my_id&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Ext.fly('my_id');&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">2</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />Ext.fly('another_id');&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">此时my_id的dom引用已经变为another_id&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000"><br />
</span><span style="color: #008080">3</span><span style="color: #008000"><img id="Codehighlighter1_116_192_Open_Image" onclick="this.style.display='none'; Codehighlighter1_116_192_Open_Text.style.display='none'; Codehighlighter1_116_192_Closed_Image.style.display='inline'; Codehighlighter1_116_192_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_116_192_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_116_192_Closed_Text.style.display='none'; Codehighlighter1_116_192_Open_Image.style.display='inline'; Codehighlighter1_116_192_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="color: #000000">my_id.highlight('FF0000',</span><span id="Codehighlighter1_116_192_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_116_192_Open_Text"><span style="color: #000000">{&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">此处的操作将是对&nbsp;&nbsp;another_id元素的操作&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000"><br />
</span><span style="color: #008080">4</span><span style="color: #008000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;endColor:'0000FF',&nbsp;duration:&nbsp;</span><span style="color: #000000">3</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">5</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="color: #000000">);</span></div>
</pre>
<p>在以后使用中，一定要合理的利用Ext.get和Ext.fly，避免滥用Ext.get这个&#8220;重量级&#8221;的方法。<br />
<br />
转自：http://www.ajaxbbs.net/post/extjs/Ext-fly-and-Ext-get.html</p><img src ="http://www.blogjava.net/redhatlinux/aggbug/254220.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/redhatlinux/" target="_blank">Hibernating</a> 2009-02-11 11:51 <a href="http://www.blogjava.net/redhatlinux/archive/2009/02/11/254220.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ExtJs2.x开发环境--Eclipse、Adobe Dreamweaver安装和配置ExtJs2.x开发插件</title><link>http://www.blogjava.net/redhatlinux/archive/2008/10/27/236809.html</link><dc:creator>Hibernating</dc:creator><author>Hibernating</author><pubDate>Mon, 27 Oct 2008 03:08:00 GMT</pubDate><guid>http://www.blogjava.net/redhatlinux/archive/2008/10/27/236809.html</guid><wfw:comment>http://www.blogjava.net/redhatlinux/comments/236809.html</wfw:comment><comments>http://www.blogjava.net/redhatlinux/archive/2008/10/27/236809.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.blogjava.net/redhatlinux/comments/commentRss/236809.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/redhatlinux/services/trackbacks/236809.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Spket是目前支持Ext 2.0最为出色的IDE。 它采用.jsb project file 文件并将继承于基类和所有文档的内容嵌入到生成代码提示的Script doc中。虽然有比较好用的开发插件，但是我个人建议和我一样的初学者还是应该采用手写代码的方式去学习ExtJs，这样便于更好的掌握和理解ExtJs。毕竟工具还是为了项目的快速开发而设计的，学习就应该一步一个脚印。&nbsp;&nbsp;<a href='http://www.blogjava.net/redhatlinux/archive/2008/10/27/236809.html'>阅读全文</a><img src ="http://www.blogjava.net/redhatlinux/aggbug/236809.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/redhatlinux/" target="_blank">Hibernating</a> 2008-10-27 11:08 <a href="http://www.blogjava.net/redhatlinux/archive/2008/10/27/236809.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【个人收藏】几个用ExtJs构建的应用演示(更新中....)</title><link>http://www.blogjava.net/redhatlinux/archive/2008/10/24/236384.html</link><dc:creator>Hibernating</dc:creator><author>Hibernating</author><pubDate>Fri, 24 Oct 2008 05:20:00 GMT</pubDate><guid>http://www.blogjava.net/redhatlinux/archive/2008/10/24/236384.html</guid><wfw:comment>http://www.blogjava.net/redhatlinux/comments/236384.html</wfw:comment><comments>http://www.blogjava.net/redhatlinux/archive/2008/10/24/236384.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/redhatlinux/comments/commentRss/236384.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/redhatlinux/services/trackbacks/236384.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 收藏的几个用ExtJs构建的应用演示，本人学习时找到的，希望对大家学习有所帮助，可以看看别人的代码是如何组织的，因为ExtJs的代码组织起来比较困难，代码量也很大。&nbsp;&nbsp;<a href='http://www.blogjava.net/redhatlinux/archive/2008/10/24/236384.html'>阅读全文</a><img src ="http://www.blogjava.net/redhatlinux/aggbug/236384.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/redhatlinux/" target="_blank">Hibernating</a> 2008-10-24 13:20 <a href="http://www.blogjava.net/redhatlinux/archive/2008/10/24/236384.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【个人收藏】ExtJs2.2视频教程在线观看及下载</title><link>http://www.blogjava.net/redhatlinux/archive/2008/10/24/236354.html</link><dc:creator>Hibernating</dc:creator><author>Hibernating</author><pubDate>Fri, 24 Oct 2008 03:19:00 GMT</pubDate><guid>http://www.blogjava.net/redhatlinux/archive/2008/10/24/236354.html</guid><wfw:comment>http://www.blogjava.net/redhatlinux/comments/236354.html</wfw:comment><comments>http://www.blogjava.net/redhatlinux/archive/2008/10/24/236354.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/redhatlinux/comments/commentRss/236354.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/redhatlinux/services/trackbacks/236354.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: ExtJs2.2视频教程在线观看及下载，由DOJO中国 | 程序员联盟亲情打造，正在学习中,感觉很不错，讲得非常细，也让我对ExtJs有了新的认识，感谢DOJOCHINA,感谢陈治文老师&nbsp;&nbsp;<a href='http://www.blogjava.net/redhatlinux/archive/2008/10/24/236354.html'>阅读全文</a><img src ="http://www.blogjava.net/redhatlinux/aggbug/236354.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/redhatlinux/" target="_blank">Hibernating</a> 2008-10-24 11:19 <a href="http://www.blogjava.net/redhatlinux/archive/2008/10/24/236354.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>