﻿<?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-liuyz2006-文章分类-extjs</title><link>http://www.blogjava.net/liuyz2006/category/50542.html</link><description /><language>zh-cn</language><lastBuildDate>Fri, 08 Feb 2013 02:23:24 GMT</lastBuildDate><pubDate>Fri, 08 Feb 2013 02:23:24 GMT</pubDate><ttl>60</ttl><item><title>“正则表达式(/[^0-9]/g,'')中的"/g"是什么意思？”</title><link>http://www.blogjava.net/liuyz2006/articles/388367.html</link><dc:creator>阿者</dc:creator><author>阿者</author><pubDate>Sun, 23 Sep 2012 02:54:00 GMT</pubDate><guid>http://www.blogjava.net/liuyz2006/articles/388367.html</guid><wfw:comment>http://www.blogjava.net/liuyz2006/comments/388367.html</wfw:comment><comments>http://www.blogjava.net/liuyz2006/articles/388367.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/liuyz2006/comments/commentRss/388367.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/liuyz2006/services/trackbacks/388367.html</trackback:ping><description><![CDATA[<p>&#8220;正则表达式(/[^0-9]/g,'')中的"/g"是什么意思？&#8221;<br /><br />也为了能够便于大家对正则表达式有一个更为综合和深刻的认识，我将一些关键点和容易犯糊涂的地方再系统总结一下。 </p>
<p>总结1：附件参数g的用法 </p>
<p>表达式加上参数g之后，表明可以进行全局匹配，注意这里&#8220;可以&#8221;的含义。我们详细叙述： </p>
<p>1）对于表达式对象的exec方法，不加入g，则只返回第一个匹配，无论执行多少次均是如此，如果加入g，则第一次执行也返回第一个匹配，再执行返回第二个匹配，依次类推。例如 <br />var regx=/user\d/; <br />var str=&#8220;user18dsdfuser2dsfsd&#8221;; <br />var rs=regx.exec(str);//此时rs的值为{user1} <br />var rs2=regx.exec(str);//此时rs的值依然为{user1} <br />如果regx=/user\d/g；则rs的值为{user1}，rs2的值为{user2} <br />通过这个例子说明：对于exec方法，表达式加入了g，并不是说执行exec方法就可以返回所有的匹配，而是说加入了g之后，我可以通过某种方式得到所有的匹配，这里的&#8220;方式&#8221;对于exec而言，就是依次执行这个方法即可。 </p>
<p>2）对于表达式对象的test方法，加入g于不加上g没有什么区别。 </p>
<p>3）对于String对象的match方法，不加入g，也只是返回第一个匹配，一直执行match方法也总是返回第一个匹配，加入g，则一次返回所有的匹配（注意这与表达式对象的exec方法不同，对于exec而言，表达式即使加上了g，也不会一次返回所有的匹配）。例如： <br />var regx=/user\d/; <br />var str=&#8220;user1sdfsffuser2dfsdf&#8221;; <br />var rs=str.match(regx);//此时rs的值为{user1} <br />var rs2=str.match(regx);//此时rs的值依然为{user1} <br />如果regx=/user\d/g，则rs的值为{user1,user2}，rs2的值也为{user1,user2} </p>
<p>4）对于String对象的replace方法，表达式不加入g，则只替换第一个匹配，如果加入g，则替换所有匹配。（开头的三道测试题能很好的说明这一点） </p>
<p>5）对于String对象的split方法，加上g与不加g是一样的，即： <br />var sep=/user\d/; <br />var array=&#8220;user1dfsfuser2dfsf&#8221;.split(sep); <br />则array的值为{dfsf, dfsf} <br />此时sep=/user\d/g，返回值是一样的。 </p>
<p>6）对于String对象的search方法，加不加g也是一样的。 </p>
<p>总结2：附加参数m的用法 </p>
<p>附加参数m，表明可以进行多行匹配，但是这个只有当使用^和$模式时才会起作用，在其他的模式中，加不加入m都可以进行多行匹配（其实说多行的字符串也是一个普通字符串），我们举例说明这一点 </p>
<p>1）使用^的例子 <br />var regx=/^b./g; <br />var str=&#8220;bd76 dfsdf <br />sdfsdfs dffs <br />b76dsf sdfsdf&#8221;; <br />var rs=str.match(regx); <br />此时加入g和不加入g，都只返回第一个匹配{bd}，如果regx=/^b./gm，则返回所有的匹配{bd,b7}，注意如果regx=/^b./m，则也只返回第一个匹配。所以，加入m表明可以进行多行匹配，加入g表明可以进行全局匹配，综合到一起就是可以进行多行全局匹配 </p>
<p>2）使用其他模式的例子，例如 <br />var regx=/user\d/; <br />var str=&#8220;sdfsfsdfsdf <br />sdfsuser3 dffs <br />b76dsf user6&#8221;; <br />var rs=str.match(regx); <br />此时不加参数g，则返回{user3}，加入参数g返回{user3,user6}，加不加入m对此没有影响。 </p>
<p>3）因此对于m我们要清楚它的使用，记住它只对^和$模式起作用，在这两种模式中，m的作用为：如果不加入m，则只能在第一行进行匹配，如果加入m则可以在所有的行进行匹配。我们再看一个^的例子 <br />var regx=/^b./; <br />var str=&#8220;ret76 dfsdf <br />bjfsdfs dffs <br />b76dsf sdfsdf&#8221;; <br />var rs=str.match(regx); <br />此时rs的值为null，如果加入g，rs的值仍然为null，如果加入m，则rs的值为{bj}（也就是说，在第一行没有找到匹配，因为有参数m，所以可以继续去下面的行去找是否有匹配），如果m和g都加上，则返回{bj,b7}（只加m不加g说明，可以去多行进行匹配，但是找到一个匹配后就返回，加入g表明将多行中所有的匹配返回，当然对于match方法是如此，对于exec呢，则需要执行多次才能依次返回） </p>
<p>总结3：在HTML的textarea输入域中，按一个Enter键，对应的控制字符为&#8220;\r\n&#8221;，即&#8220;回车换行&#8221;，而不是&#8220;\n\r&#8221;，即&#8220;换行回车&#8221;，我们看一个前面我们举过的例子： <br />var regx=/a\r\nbc/; <br />var str=&#8220;a <br />bc&#8221;; <br />var rs=regx.exec(str); <br />结果：匹配成功，rs的值为：{ }，如果表达式为/a\n\rbc/，则不会被匹配，因此在一般的编辑器中一个&#8221;Enter&#8221;键代表着&#8220;回车换行&#8221;，而非&#8220;换行回车&#8221;，至少在textarea域中是这样的。</p>
<p><br />&nbsp;</p><img src ="http://www.blogjava.net/liuyz2006/aggbug/388367.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/liuyz2006/" target="_blank">阿者</a> 2012-09-23 10:54 <a href="http://www.blogjava.net/liuyz2006/articles/388367.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ExtJs页面布局总结</title><link>http://www.blogjava.net/liuyz2006/articles/387305.html</link><dc:creator>阿者</dc:creator><author>阿者</author><pubDate>Sat, 08 Sep 2012 09:55:00 GMT</pubDate><guid>http://www.blogjava.net/liuyz2006/articles/387305.html</guid><wfw:comment>http://www.blogjava.net/liuyz2006/comments/387305.html</wfw:comment><comments>http://www.blogjava.net/liuyz2006/articles/387305.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/liuyz2006/comments/commentRss/387305.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/liuyz2006/services/trackbacks/387305.html</trackback:ping><description><![CDATA[<div class="articalTitle">
<h2 id="t_657ed0690100ry01" class="titName SG_txta">ExtJs页面布局总结</h2></div>
<div id="sina_keyword_ad_area" class="articalTag">&nbsp;</div><!-- 正文开始 -->

<div id="sina_keyword_ad_area2" class="articalContent  ">
<div>
<p>EXT标准布局类</p>
<p style="text-indent: 2em">面板相当于一张干净的白纸，如果直接在上面添加内容，将很难控制面板中内容的显示位置，面板元素越多就越显得凌乱，所以需要在面板上划分不同的区域，将面板内容展示到希望的位置上。ExtJS通过提供多种布局类来为面板提供支持，主要包括如下10种：&nbsp;<wbr><br />&nbsp;<wbr>&nbsp;<wbr> ContainerLayout（容器布局）&nbsp;<wbr><br />&nbsp;<wbr>&nbsp;<wbr> FitLayout（自适应布局）&nbsp;<wbr><br />&nbsp;<wbr>&nbsp;<wbr> AccordionLayout（折叠布局）&nbsp;<wbr><br />&nbsp;<wbr>&nbsp;<wbr> CardLayout（卡片式布局）&nbsp;<wbr><br />&nbsp;<wbr>&nbsp;<wbr> AnchorLayout（锚点布局）&nbsp;<wbr><br />&nbsp;<wbr>&nbsp;<wbr> AbsoluteLayout（绝对位置布局）&nbsp;<wbr><br />&nbsp;<wbr>&nbsp;<wbr> FormLayout（表单布局）&nbsp;<wbr><br />&nbsp;<wbr>&nbsp;<wbr> ColumnLayout（列布局）&nbsp;<wbr><br />&nbsp;<wbr>&nbsp;<wbr> TableLayout（表格布局）&nbsp;<wbr><br />&nbsp;<wbr>&nbsp;<wbr> BorderLayout（边框布局）<br />接下来分别介绍这10种布局类的特点及使用方式。<br />1&nbsp;<wbr> ContainerLayout容器布局<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> Ext.layout.ContainerLayout 提供了所有布局类的基本功能，它没有可视化的外观，只是提供容器作为布局的基本逻辑，这个类通常被扩展而不通过 new 关键字直接创建。如果面板（panel）没有指定任何布局类，则它将会作为默认布局来创建，表5-4是主要配置项。</p>
<p style="text-indent: 2em">表5-4&nbsp;<wbr> Ext.layout.ContainerLayout主要配置项目表</p>
<p><br /></p>
<table style="width: 664px; height: 217px" border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td width="82">
<p style="text-indent: 2em" align="left">配置项</p></td>
<td width="98">
<p style="text-indent: 2em">参数类型</p></td>
<td width="410">
<p style="text-indent: 2em">说明</p></td></tr>
<tr>
<td width="82">
<p style="text-indent: 2em">activeItem</p></td>
<td width="98">
<p style="text-indent: 2em">String/Number</p></td>
<td width="410">
<p style="text-indent: 2em">一个对当前活动组件的引用。activeItem只在那些一次只能显示一个 items 项目的布局中生效，例如：Ext.layout.Accordion、Ext.layout.CardLayout、Ext.layout.FitLayout</p></td></tr></tbody></table>&nbsp;<wbr> 
<p style="text-indent: 2em">2&nbsp;<wbr> FitLayout自适应布局</p>
<p style="text-indent: 2em">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> Ext.layout.FitLayout 是布局的基础类，对应面板布局配置项（layout）的名称为 fit，使用 fit 布局将使面板子元素自动充满容器，如果在当前容器中存在多个子面板则只有第一个会被显示。<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 注意：在本节的示例之前会简单的介绍新概念，组件的xtype类型。xtype类型相当于组件的别名，通过使用xtype类型可以实现组件的延时创建。在后续的示例中会大量使用xtype来创建组件，这将有利于读者形成使用xtype的习惯，而减少new关键字的使用。<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 下面是自适应布局的一个简单的示例。<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 代码5-7：FitLayout（自适应布局）示例<br />&nbsp;<wbr> &lt;script type="text/javascript"&gt;<br />&nbsp;<wbr>Ext.onReady(function(){<br />&nbsp;<wbr> Ext.BLANK_IMAGE_URL ='../../extjs2.0/resources/images/default/s.gif';<br />&nbsp;<wbr> var panel = new Ext.Panel({<br />&nbsp;<wbr>&nbsp;<wbr> layout :'fit',<br />&nbsp;<wbr>&nbsp;<wbr> title:'Ext.layout.FitLayout布局示例',<br />&nbsp;<wbr>&nbsp;<wbr> frame:true,&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> //渲染面板<br />&nbsp;<wbr>&nbsp;<wbr> height : 150,<br />&nbsp;<wbr>&nbsp;<wbr> width : 250,<br />&nbsp;<wbr>&nbsp;<wbr> applyTo :'panel',<br />&nbsp;<wbr>&nbsp;<wbr> defaults : {&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> //设置默认属性<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> bodyStyle:'background-color:#FFFFFF'&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> //设置面板体的背景色<br />&nbsp;<wbr>&nbsp;<wbr> },<br />//面板items配置项默认的xtype类型为panel，该默认值可以通过defaultType配置项进行更改<br />&nbsp;<wbr>&nbsp;<wbr> items: [<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> {<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> title : '嵌套面板一',<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> html : '面板一'<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> },<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> {<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> title : '嵌套面板二',<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> html : '面板二'<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> }<br />&nbsp;<wbr>&nbsp;<wbr> ]<br />&nbsp;<wbr> })<br />&nbsp;<wbr>});<br />&nbsp;<wbr> &lt;/script&gt;<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 在代码5-7中共为外层面板添加了2个子面板，title分别是&#8220;嵌套面板一&#8221;和&#8220;嵌套面板二&#8221;，并指定外层面板的布局类型为fit，由图 5-11可以看到&#8220;嵌套面板一&#8221;充满了整个外层面板，而&#8220;嵌套面板二&#8221;并没有显示出来。运行效果如图5-11所示。<br /></p>
<div><img style="margin: 0px 10px 0px 0px" title="ExtJs页面布局总结" alt="ExtJs页面布局总结 - 成功就在脚下 - 成功就在脚下" src="http://img540.ph.126.net/gbZ_czBRxpIvDVncJ9JL5w==/1348265138445220980.jpg" real_src="http://img540.ph.126.net/gbZ_czBRxpIvDVncJ9JL5w==/1348265138445220980.jpg" /><br />图5-11&nbsp;<wbr> Ext.layout.FitLayout布局示例</div>
<p style="text-indent: 2em">3&nbsp;<wbr> AccordionLayout折叠布局</p>
<p style="text-indent: 2em">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> Ext.layout.Accordion 扩展自 Ext.layout.FitLayout 布局，对应面板布局（layout）配置项的名称为accordion。该布局会包含多个子面板，任何时候都只有一个子面板处于打开状态，每个子面板都内置了对展开和收缩功能的支持。表5-5列出了它的主要配置项目。</p>
<p style="text-indent: 2em">表5-5&nbsp;<wbr> Ext.layout.Accordion主要配置项目表</p>
<p><br /></p>
<table style="width: 788px; height: 598px" border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td width="74">
<p style="text-indent: 2em">配置项</p></td>
<td width="39">
<p style="text-indent: 2em">&nbsp;<wbr></p></td>
<td width="70">
<p style="text-indent: 2em">参数类型</p></td>
<td width="407">
<p style="text-indent: 2em">说明</p></td></tr>
<tr>
<td width="74">
<p style="text-indent: 2em">activeOnTop</p></td>
<td width="39">
<p style="text-indent: 2em">&nbsp;<wbr></p></td>
<td width="70">
<p style="text-indent: 2em">Boolean</p></td>
<td width="407">
<p style="text-indent: 2em">是否保持展开的子面板处于父面板的顶端，true则交换当前展开面板到顶端，false则保持原来的位置不动。</p></td></tr>
<tr>
<td width="74">
<p style="text-indent: 2em">animate</p></td>
<td width="39">
<p style="text-indent: 2em">&nbsp;<wbr></p></td>
<td width="70">
<p style="text-indent: 2em">Boolean</p></td>
<td width="407">
<p style="text-indent: 2em">设置在展开或收缩子面板时是否使用滑动方式，true则采用滑动方式，默认为false。</p></td></tr>
<tr>
<td width="74">
<p style="text-indent: 2em">fill</p></td>
<td width="39">
<p style="text-indent: 2em">&nbsp;<wbr></p></td>
<td width="70">
<p style="text-indent: 2em">Boolean</p></td>
<td width="407">
<p style="text-indent: 2em">设置子面板是否自动调整高度充满父面板的剩余空间，true则充满，默认为true。</p></td></tr>
<tr>
<td width="74">
<p style="text-indent: 2em">hideCollapse</p></td>
<td width="39">
<p style="text-indent: 2em">Tool</p></td>
<td width="70">
<p style="text-indent: 2em">Boolean</p></td>
<td width="407">
<p style="text-indent: 2em">设置是否隐藏子面板的 &#8220;展开收缩&#8221; 按钮，true表示隐藏，false表示显示，默认为false。如果设置为true，则应使titleCollapse配置项也为true。</p></td></tr>
<tr>
<td width="74">
<p style="text-indent: 2em">titleCollapse</p></td>
<td width="39">
<p style="text-indent: 2em">&nbsp;<wbr></p></td>
<td width="70">
<p style="text-indent: 2em" align="center">Boolean</p></td>
<td width="407">
<p style="text-indent: 2em">设置是否允许通过点击子面板的标题来展开或收缩面板，true表示允许，默认为true。</p></td></tr></tbody></table><br />
<p style="text-indent: 2em">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 下面是折叠布局的一个简单的示例。<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 代码5-8：AccordionLayout（折叠布局）示例<br />&nbsp;<wbr> &lt;script type="text/javascript"&gt;<br />&nbsp;<wbr>Ext.onReady(function(){<br />&nbsp;<wbr> Ext.BLANK_IMAGE_URL ='../../extjs2.0/resources/images/default/s.gif';<br />&nbsp;<wbr> var panel = new Ext.Panel({<br />&nbsp;<wbr>&nbsp;<wbr> layout : 'accordion',<br />&nbsp;<wbr>&nbsp;<wbr> layoutConfig :{<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> activeOnTop : true,&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> //设置打开的子面板置顶<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> fill : true,&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> //子面板充满父面板的剩余空间<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> hideCollapseTool: false,&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> //显示&#8220;展开收缩&#8221;按钮<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> titleCollapse : true,&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> //允许通过点击子面板的标题来展开或收缩面板<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> animate:true&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> //使用动画效果<br />&nbsp;<wbr>&nbsp;<wbr> },<br />&nbsp;<wbr>&nbsp;<wbr> title:'Ext.layout.Accordion布局示例',<br />&nbsp;<wbr>&nbsp;<wbr> frame:true,&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> //渲染面板<br />&nbsp;<wbr>&nbsp;<wbr> height : 150,<br />&nbsp;<wbr>&nbsp;<wbr> width : 250,<br />&nbsp;<wbr>&nbsp;<wbr> applyTo :'panel',<br />&nbsp;<wbr>&nbsp;<wbr> defaults : {&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> //设置默认属性<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> bodyStyle:'background-color:#FFFFFF;padding:15px'<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> //设置面板体的背景色<br />&nbsp;<wbr>&nbsp;<wbr> },<br />&nbsp;<wbr>&nbsp;<wbr> items: [<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> {<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> title : '嵌套面板一',<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> html : '说明一'<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> },<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> {<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> title : '嵌套面板二',<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> html : '说明二'<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> } ,<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> {<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> title : '嵌套面板三',<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> html : '说明三'<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> }<br />&nbsp;<wbr>&nbsp;<wbr> ]<br />&nbsp;<wbr> })<br />&nbsp;<wbr>});<br />&nbsp;<wbr> &lt;/script&gt;<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 代码5-8所示Accordion布局可以在多个不同的子面板之间切换，适合于表现大量的分组内容或制作可以伸展的分组菜单，在开发中使用较多的布局类，效果如图5-12~5-13所示。</p>
<div><img style="margin: 0px 10px 0px 0px" title="ExtJs页面布局总结" alt="ExtJs页面布局总结 - 成功就在脚下 - 成功就在脚下" src="http://img769.ph.126.net/QFad8P9M6KoHcczrI0FvYA==/2462624571242671352.jpg" real_src="http://img769.ph.126.net/QFad8P9M6KoHcczrI0FvYA==/2462624571242671352.jpg" /></div>
<p style="text-indent: 2em">4&nbsp;<wbr> CardLayout卡片式布局<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> Ext.layout.CardLayout扩展自Ext.layout.FitLayout布局，对应面板布局（layout）配置项的名称为 card。该布局会包含多个子面板，任何时候都只有一个子面板处于显示状态，这种布局类经常用来制作向导和标签页。该布局的重点方式是 setActiveItem，因为一次只能显示一个子面板，所以切换子面板的唯一途径就是调用 setActiveItem 方法，它接受一个子面板id或索引作为参数。CardLayout布局并没有提供一个子面板的导航机制，导航逻辑需要开发人员自己实现。 Ext.layout.CardLayout主要方法如表5-6所示。</p>
<p style="text-indent: 2em">表5-6&nbsp;<wbr> Ext.layout.CardLayout主要方法表</p>
<p><br /></p>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td width="85">
<p style="text-indent: 2em">&nbsp;<wbr></p></td>
<td width="166">
<p style="text-indent: 2em">方法名</p></td>
<td width="82">
<p style="text-indent: 2em">&nbsp;<wbr></p></td>
<td width="14">
<p style="text-indent: 2em">&nbsp;<wbr></p></td>
<td width="178">
<p style="text-indent: 2em">说明</p></td></tr>
<tr>
<td width="85">
<p style="text-indent: 2em">setActiveItem(</p></td>
<td width="166">
<p style="text-indent: 2em">String/Number item ) : void</p></td>
<td width="82">
<p style="text-indent: 2em">根据子面板</p></td>
<td width="14">
<p style="text-indent: 2em">id</p></td>
<td width="178">
<p style="text-indent: 2em">或索引切换当前显示的子面板</p></td></tr></tbody></table><br />
<p style="text-indent: 2em">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 下面是卡片式布局的一个简单的示例。<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 代码5-9：CardLayout（卡片式布局）示例<br />&nbsp;<wbr> &lt;script type="text/javascript"&gt;<br />&nbsp;<wbr>Ext.onReady(function(){<br />&nbsp;<wbr> Ext.BLANK_IMAGE_URL ='../../extjs2.0/resources/images/default/s.gif';<br />&nbsp;<wbr> var panel = new Ext.Panel({<br />&nbsp;<wbr>&nbsp;<wbr> layout : 'card',<br />&nbsp;<wbr>&nbsp;<wbr> activeItem : 0,&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> //设置默认显示第一个子面板<br />&nbsp;<wbr>&nbsp;<wbr> title:'Ext.layout.CardLayout布局示例',<br />&nbsp;<wbr>&nbsp;<wbr> frame:true,&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> //渲染面板<br />&nbsp;<wbr>&nbsp;<wbr> height : 150,<br />&nbsp;<wbr>&nbsp;<wbr> width : 250,<br />&nbsp;<wbr>&nbsp;<wbr> applyTo :'panel',<br />&nbsp;<wbr>&nbsp;<wbr> defaults : {&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> //设置默认属性<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> bodyStyle:'background-color:#FFFFFF;padding:15px' //设置面板体的背景色<br />&nbsp;<wbr>&nbsp;<wbr> },&nbsp;<wbr><br />&nbsp;<wbr>&nbsp;<wbr> items: [<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> {<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> title : '嵌套面板一',<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> html : '说明一',<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> id : 'p1'<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> },<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> {<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> title : '嵌套面板二',<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> html : '说明二',<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> id : 'p2'<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> },<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> {<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> title : '嵌套面板三',<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> html : '说明三',<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> id : 'p3'<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> }<br />&nbsp;<wbr>&nbsp;<wbr> ],<br />&nbsp;<wbr>&nbsp;<wbr> buttons:[<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> {<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> text : '上一页',<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> handler :changePage<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> },<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> {<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> text : '下一页',<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> handler :changePage<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> }<br />&nbsp;<wbr>&nbsp;<wbr> ]<br />&nbsp;<wbr> })<br />&nbsp;<wbr> //切换子面板<br />&nbsp;<wbr> function changePage(btn){<br />&nbsp;<wbr>&nbsp;<wbr> var index = Number(panel.layout.activeItem.id.substring(1));<br />&nbsp;<wbr>&nbsp;<wbr> if(btn.text == '上一页'){<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> index -= 1;<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> if(index &lt;1){<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> index = 1;<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> }<br />&nbsp;<wbr>&nbsp;<wbr> }else{<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> index += 1;<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> if(index &gt;3){<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> index = 3;<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> }<br />&nbsp;<wbr>&nbsp;<wbr> }<br />&nbsp;<wbr>&nbsp;<wbr> panel.layout.setActiveItem('p'+index);<br />&nbsp;<wbr> }<br />&nbsp;<wbr>});<br />&nbsp;<wbr> &lt;/script&gt;<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 代码 5-9 演示了 CardLayout 卡片式布局的使用方式，这里的重点是调用面板布局的setActiveItem方法激活指定id的子面板进行显示，其中changePage函数的用途是计算点击上一页或下一页之后将要显示的子面板id，然后将该id传入到setActiveItem方法中实现子面板的切换。运行效果如图 5-14~5-15所示。</p>
<div><img style="margin: 0px 10px 0px 0px" title="ExtJs页面布局总结" alt="ExtJs页面布局总结 - 成功就在脚下 - 成功就在脚下" src="http://img158.ph.126.net/GWTXDZSbqKNaD09suupGPQ==/2172986820207773594.jpg" real_src="http://img158.ph.126.net/GWTXDZSbqKNaD09suupGPQ==/2172986820207773594.jpg" />&nbsp;<wbr></div>
<p style="text-indent: 2em">5&nbsp;<wbr> AnchorLayout锚点布局</p>
<p style="text-indent: 2em">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> Ext.layout.AnchorLayout 是根据容器大小为其所包含的子面板进行定位的布局，对应面板布局（layout）配置项的名称为 anchor。如果容器大小发生变化，所有子面板的位置都会根据规则重新计算，并自动渲染。使用anchor布局需要注意以下配置项的使用。&nbsp;<wbr><br />&nbsp;<wbr> &nbsp;<wbr> anchorSize（父容器提供）<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> anchor 布局提供了 anchorSize 配置项用来设置虚拟容器的大小，默认情况下 anchor 布局是根据容器自身的大小来进行计算定位的，如果提供了 anchorSize 属性则 anchor 布局就会根据该尺寸生成一个虚拟容器，然后根据这个虚拟容器的大小来进行计算定位。&nbsp;<wbr><br />&nbsp;<wbr> &nbsp;<wbr> anchor（子容器提供）<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 加入到使用 anchor布局面板中的子面板也都支持一个 anchor配置项，它是一个包含 2个值的字符串，水平值和垂直值，例如：'100% 50%'，这个值告知父容器应该怎样为加入到其中的子面板进行定位，有效值包括如下3类。&nbsp;<wbr><br />&nbsp;<wbr> &nbsp;<wbr> 百分比（Percentage）：1-100之间的任意百分比，第1项数值表示子面板占父容器宽度的百分比，第2项数值表示子面板占父容器宽高的百分比，例如'100% 50%'表示，子面板宽度为父容器的 100%，而高度为父容器的 1/2，如果只提供一个值（如：'50%'）则只对子面板的宽度生效，高度保持默认值。&nbsp;<wbr><br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 偏移值（Offsets）：任意整数，可以为正数也可以是负数，第1项数值表示子面板到父容器右边缘的偏移量，第2项数值表示子面板到父容器下边缘的偏移量，例如'-50 -100'表示，子面板距父容器的右边缘偏移50像素，即子面板的宽度为父容器的宽度减去50像素；子面板距父容器的下边缘偏移100像素，即子面板高度为父容器的高度减去100像素。如果只提供一个值（如：'-50'）则只对子面板的宽度生效，高度保持默认值。&nbsp;<wbr><br />&nbsp;<wbr> &nbsp;<wbr> 参考边（Sides）：有效的值包括 'right'（或 'r'）和'bottom'（或 'b'）。要求容器设置固定的大小或提供相应的anchorSize配置项才会有正确的效果，例如'r b'，说明父容器会计算与子容器宽度和高度的差值，然后按父容器体（body）的实际宽度和高度减去这个差值，重新为子面板定位。<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 以上3种赋值类型可以组合使用，例如'-50 75%'，下面将分别针对这3种情况举例说明。<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 1.&nbsp;<wbr> 百分比（Percentage）定位<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 在代码 5-10 中创建一个使用百分比方式为子面板进行定位的示例，从示例中可以清晰的体会到百分比定位的特点。<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 代码5-10：百分比（Percentage）定位示例<br />&nbsp;<wbr> &lt;script type="text/javascript"&gt;<br />&nbsp;<wbr>Ext.onReady(function(){&nbsp;<wbr><br />&nbsp;<wbr> Ext.BLANK_IMAGE_URL ='../../extjs2.0/resources/images/default/s.gif';<br />&nbsp;<wbr> var panel = new Ext.Panel({<br />&nbsp;<wbr>&nbsp;<wbr> layout : 'anchor',<br />&nbsp;<wbr>&nbsp;<wbr> title:'Ext.layout.AnchorLayout布局示例',<br />&nbsp;<wbr>&nbsp;<wbr> frame:false,&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> //渲染面板<br />&nbsp;<wbr>&nbsp;<wbr> height : 150,<br />&nbsp;<wbr>&nbsp;<wbr> width : 300,<br />&nbsp;<wbr>&nbsp;<wbr> applyTo :'panel',<br />&nbsp;<wbr>&nbsp;<wbr> defaults : {&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> //设置默认属性<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> bodyStyle:'background-color:#FFFFFF;padding:15px' //设置面板体的背景色<br />&nbsp;<wbr>&nbsp;<wbr> },<br />&nbsp;<wbr>&nbsp;<wbr> items: [<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> {<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> anchor : '50% 50%',&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> //设置子面板的宽高为父面板的50%<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> title : '子面板'<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> }<br />&nbsp;<wbr>&nbsp;<wbr> ]<br />&nbsp;<wbr> })<br />&nbsp;<wbr>});<br />&nbsp;<wbr> &lt;/script&gt;<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 代码5-10演示了百分比（Percentage）定位的使用方式，其中anchor : '50% 50%'决定了子面板的高度和宽度都为父面板的50%。运行效果如图5-16所示。</p>
<div><img style="margin: 0px 10px 0px 0px" title="ExtJs页面布局总结" alt="ExtJs页面布局总结 - 成功就在脚下 - 成功就在脚下" src="http://img396.ph.126.net/p55bvSOyIZFXeoOc_gXOsQ==/1084804560243992401.jpg" real_src="http://img396.ph.126.net/p55bvSOyIZFXeoOc_gXOsQ==/1084804560243992401.jpg" /><br />图5-16&nbsp;<wbr> Ext.layout.AnchorLayout布局示例（百分比定位）<br />2.&nbsp;<wbr> 偏移值（Offsets）定位<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 在代码 5-11 中创建一个使用偏移值为子面板进行定位的示例，从示例中可以清晰的体会到偏移值定位的特点。<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 代码5-11：偏移值（Offsets）定位示例<br />&nbsp;<wbr> &lt;script type="text/javascript"&gt;<br />&nbsp;<wbr>Ext.onReady(function(){<br />&nbsp;<wbr> Ext.BLANK_IMAGE_URL ='../../extjs2.0/resources/images/default/s.gif';<br />&nbsp;<wbr> var panel = new Ext.Panel({<br />&nbsp;<wbr>&nbsp;<wbr> layout : 'anchor',<br />&nbsp;<wbr>&nbsp;<wbr> title:'Ext.layout.AnchorLayout布局示例',<br />&nbsp;<wbr>&nbsp;<wbr> frame:false,//渲染面板<br />&nbsp;<wbr>&nbsp;<wbr> height : 150,<br />&nbsp;<wbr>&nbsp;<wbr> width : 300,<br />&nbsp;<wbr>&nbsp;<wbr> applyTo :'panel',<br />&nbsp;<wbr>&nbsp;<wbr> defaults : {//设置默认属性<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> bodyStyle:'background-color:#FFFFFF;padding:15px'//设置面板体的背景色<br />&nbsp;<wbr>&nbsp;<wbr> },<br />&nbsp;<wbr>&nbsp;<wbr> items: [<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> {&nbsp;<wbr><br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> anchor : '-10 -10',&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> //设置子面板的宽高偏移父面板10像素<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> title : '子面板'<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> }<br />&nbsp;<wbr>&nbsp;<wbr> ]<br />&nbsp;<wbr> })<br />&nbsp;<wbr>});<br />&nbsp;<wbr> &lt;/script&gt;<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 代码5-11演示了偏移值（Offsets）定位的使用方式，其中anchor : '-10 -10',决定了子面板到父面板的右边和下边都为10像素。运行效果如图5-17所示。</div>
<div><img style="margin: 0px 10px 0px 0px" title="ExtJs页面布局总结" alt="ExtJs页面布局总结 - 成功就在脚下 - 成功就在脚下" src="http://img699.ph.126.net/vLE6JBh0XyB93vpAsuGGtg==/1132373831308220533.jpg" real_src="http://img699.ph.126.net/vLE6JBh0XyB93vpAsuGGtg==/1132373831308220533.jpg" /><br />图5-17&nbsp;<wbr> Ext.layout.AnchorLayout布局示例（偏移值定位）<br />3.&nbsp;<wbr> 参考边（Sides）定位<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 在代码 5-12 中创建一个使用参考边为子面板进行定位的示例，从示例中可以清晰的体会到参考边定位的特点。<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 代码5-12：参考边（Sides）定位示例<br />&lt;script type="text/javascript"&gt;<br />&nbsp;<wbr>Ext.onReady(function(){<br />&nbsp;<wbr> Ext.BLANK_IMAGE_URL ='../../extjs2.0/resources/images/default/s.gif';<br />&nbsp;<wbr> var panel = new Ext.Panel({<br />&nbsp;<wbr>&nbsp;<wbr> layout : 'anchor',<br />&nbsp;<wbr>&nbsp;<wbr> title:'Ext.layout.AnchorLayout布局示例',<br />&nbsp;<wbr>&nbsp;<wbr> autoScroll :true,//自动显示滚动条<br />&nbsp;<wbr>&nbsp;<wbr> frame:false,//渲染面板<br />&nbsp;<wbr>&nbsp;<wbr> height : 150,<br />&nbsp;<wbr>&nbsp;<wbr> width : 300,<br />&nbsp;<wbr>&nbsp;<wbr> applyTo :'panel',<br />&nbsp;<wbr>&nbsp;<wbr> defaults : {//设置默认属性<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> bodyStyle:'background-color:#FFFFFF;padding:15px'//设置面板体的背景色<br />&nbsp;<wbr>&nbsp;<wbr> },<br />&nbsp;<wbr>&nbsp;<wbr> items: [<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> {<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> anchor : 'r b',&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> //相对于父容器的右边和底边的差值进行定位<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> width : 200,<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> height : 100,<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> title : '子面板'<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> }<br />&nbsp;<wbr>&nbsp;<wbr> ]<br />&nbsp;<wbr> })<br />&nbsp;<wbr>});<br />&lt;/script&gt;<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 代码5-12演示了参考边（Sides）定位的使用方式，其中anchor : 'r b',,决定了子面板将相对于父面板的右边和底边的差值进行定位。运行效果如图5-18所示。</div>
<div><img style="margin: 0px 10px 0px 0px" title="ExtJs页面布局总结" alt="ExtJs页面布局总结 - 成功就在脚下 - 成功就在脚下" src="http://img612.ph.126.net/ORhY4GdjWuU6agI5rs2l3w==/1699827384357267248.jpg" real_src="http://img612.ph.126.net/ORhY4GdjWuU6agI5rs2l3w==/1699827384357267248.jpg" />&nbsp;<wbr><br />图5-18&nbsp;<wbr> Ext.layout.AnchorLayout布局示例（参考边定位）</div>
<p style="text-indent: 2em">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 在代码5-12中使用参考边为子面板进行定位，下面给出了计算过程的简要说明：<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 宽度计算：<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 父容器体(body)宽度为 = 298（说明：300减去左右两条边的宽度）<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 宽度差值为 =&nbsp;<wbr> 100（说明：父容器体(body)宽度300 &#8211; 子容器宽度200）<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 计算后的子容器宽度为 = 198（说明： 298 - 100）<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 高度计算：<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 父容器体(body)高度为 = 123（说明：150减去上下两条边的宽度和header的高度）<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 高度差值为&nbsp;<wbr> =&nbsp;<wbr> 50（说明：父容器高度150 &#8211; 子容器高度100）<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 计算后的子容器高度为 =&nbsp;<wbr> 73（说明：123 -50）<br />6&nbsp;<wbr> AbsoluteLayout绝对位置布局</p>
<p style="text-indent: 2em">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> Ext.layout.AbsoluteLayout扩展自Ext.layout.AnchorLayout布局，对应面板布局（layout）配置项的名称为 absolute。它可以根据子面板中配置的 x/y坐标进行定位，并且坐标值支持使用固定值和百分比两种形式。下面是绝对位置布局的简单的示例。<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 代码5-13：AbsoluteLayout绝对位置布局示例<br />&nbsp;<wbr> &lt;script type="text/javascript"&gt;<br />&nbsp;<wbr>Ext.onReady(function(){<br />&nbsp;<wbr> Ext.BLANK_IMAGE_URL ='../../extjs2.0/resources/images/default/s.gif';<br />&nbsp;<wbr> var panel = new Ext.Panel({<br />&nbsp;<wbr>&nbsp;<wbr> layout : 'absolute',<br />&nbsp;<wbr>&nbsp;<wbr> title:'Ext.layout.AbsoluteLayout布局示例',<br />&nbsp;<wbr>&nbsp;<wbr> frame:false,&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> //渲染面板<br />&nbsp;<wbr>&nbsp;<wbr> height : 150,<br />&nbsp;<wbr>&nbsp;<wbr> width : 300,<br />&nbsp;<wbr>&nbsp;<wbr> applyTo :'panel',<br />&nbsp;<wbr>&nbsp;<wbr> defaults : {&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> //设置默认属性<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> bodyStyle:'background-color:#FFFFFF;padding:15px' //设置面板体的背景色<br />&nbsp;<wbr>&nbsp;<wbr> },<br />&nbsp;<wbr>&nbsp;<wbr> items: [<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> {<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> x : '10%',&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> //横坐标为距父容器宽度10%的位置<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> y : 10,&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> //纵坐标为距父容器上边缘10像素的位置<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> width : 100,<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> height : 50,<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> title : '子面板一'<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> },<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> {&nbsp;<wbr>x:90,&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> //横坐标为距父容器左边缘90像素的位置<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> y : 70,&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> //纵坐标为距父容器上边缘70像素的位置<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> width : 100,<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> height : 50,<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> title : '子面板二'&nbsp;<wbr><br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> }<br />&nbsp;<wbr>&nbsp;<wbr> ]<br />&nbsp;<wbr> })<br />&nbsp;<wbr>});<br />&nbsp;<wbr> &lt;/script&gt;<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 代码5-13演示了AbsoluteLayout（绝对位置布局）的使用方式，在示例中子面板的x、y配置项决定了它在父面板中的具体位置。运行效果如图5-19所示。</p>
<div><img style="margin: 0px 10px 0px 0px" title="ExtJs页面布局总结" alt="ExtJs页面布局总结 - 成功就在脚下 - 成功就在脚下" src="http://img842.ph.126.net/TM6uJNoSv3XH4zyHeznZKw==/1858579271222405172.jpg" real_src="http://img842.ph.126.net/TM6uJNoSv3XH4zyHeznZKw==/1858579271222405172.jpg" />&nbsp;<wbr><br />图5-19&nbsp;<wbr> Ext.layout.AbsoluteLayout布局示例</div>
<p style="text-indent: 2em">7&nbsp;<wbr> FormLayout表单布局</p>
<p style="text-indent: 2em">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> Ext.layout.FormLayout是为表单特殊设计的布局，用来管理表单字段的显示，通常情况下直接使用Ext.form.FormPanel 表单面板，因为它已经内置了表单布局，并且提供了表单提交、读取等表单的功能。使用form布局的容器可以使用是些表单特有的配置项，它们包括：&nbsp;<wbr><br />&nbsp;<wbr> &nbsp;<wbr> hideLabels: (Boolean) ：是否隐藏字段标签，默认为false。&nbsp;<wbr><br />&nbsp;<wbr> &nbsp;<wbr> itemCls: (String) ：每个字段项和字段标签上的样式类，默认值为'x-form-item'。&nbsp;<wbr><br />&nbsp;<wbr> &nbsp;<wbr> labelAlign: (String) ：字段标签的对齐方式，默认为空表示左对齐。&nbsp;<wbr><br />&nbsp;<wbr> &nbsp;<wbr> labelPad: (Number) ：字段标签与字段直接的空白，默认为 5，该项只在提供labelWidth配置项的情况下生效。&nbsp;<wbr><br />&nbsp;<wbr> &nbsp;<wbr> labelWidth: (Number) ：字段标签的宽度，默认为100。 任何组件都可以加入到表单布局的容器当中，但是扩展自 Ext.form.Field 类的组件可以支持一些表单项的特殊属性，它们包括：&nbsp;<wbr><br />&nbsp;<wbr> &nbsp;<wbr> clearCls: (String) ：应用到专门的清除div上的样式，默认为'x-form-clear-left'。&nbsp;<wbr><br />&nbsp;<wbr> &nbsp;<wbr> fieldLabel: (String) ：字段标签上的文本，默认为''。&nbsp;<wbr><br />&nbsp;<wbr> &nbsp;<wbr> hideLabel: (Boolean) ：设置是否隐藏标签和分割符，默认为false。&nbsp;<wbr><br />&nbsp;<wbr> &nbsp;<wbr> itemCls: (String) ：应用到表单字段及标签上的样式类，默认为'x-form-item'。&nbsp;<wbr><br />&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>labelSeparator: (String) ：字段标签和字段本身直接的分隔符，默认为':'。&nbsp;<wbr><br />&nbsp;<wbr> &nbsp;<wbr> labelStyle: (String) ：应用到字段标签上的样式类。<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> Ext.layout.FormLayout主要配置项目如表5-7所示。</p>
<p style="text-indent: 2em">表5-7&nbsp;<wbr> Ext.layout.FormLayout主要配置项目表</p>
<p><br /></p>
<table style="width: 671px; height: 380px" border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td width="125">
<p style="text-indent: 2em">配置项</p></td>
<td width="107">
<p style="text-indent: 2em">参数类型</p></td>
<td width="360">
<p style="text-indent: 2em">说明</p></td></tr>
<tr>
<td width="125">
<p style="text-indent: 2em">elementStyle</p></td>
<td width="107">
<p style="text-indent: 2em">String</p></td>
<td width="360">
<p style="text-indent: 2em">应用到每一个布局中元素上的样式类，默认为''</p></td></tr>
<tr>
<td width="125">
<p style="text-indent: 2em">labelSeparator</p></td>
<td width="107">
<p style="text-indent: 2em">String</p></td>
<td width="360">
<p style="text-indent: 2em">字段标签与字段本身直接的分隔符，默认为':'。如果布局和面板中同时配置了labelSeparator，则面板中的设置会覆盖布局中的设置。</p></td></tr>
<tr>
<td width="125">
<p style="text-indent: 2em">labelStyle</p></td>
<td width="107">
<p style="text-indent: 2em">String</p></td>
<td width="360">
<p style="text-indent: 2em">应用到每一个字段标签上的样式类，默认为''。</p></td></tr></tbody></table><br />
<p style="text-indent: 2em">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 下面是表单布局的简单的示例，在示例中创建了一个包含用户名和密码2个输入字段的面板，这个面板最终生成的效果与第4章中介绍的FormPanel相同。<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 代码5-14： FormLayout（表单布局）示例<br />&lt;script type="text/javascript"&gt;<br />&nbsp;<wbr>Ext.onReady(function(){<br />&nbsp;<wbr> Ext.BLANK_IMAGE_URL ='../../extjs2.0/resources/images/default/s.gif';<br />&nbsp;<wbr> Ext.QuickTips.init();<br />&nbsp;<wbr> var panel = new Ext.Panel({<br />&nbsp;<wbr>&nbsp;<wbr> title:'Ext.layout.FormLayout布局示例',<br />&nbsp;<wbr>&nbsp;<wbr> layout : 'form',<br />&nbsp;<wbr>&nbsp;<wbr> labelSeparator : '：',&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> //在容器中指定分隔符<br />&nbsp;<wbr>&nbsp;<wbr> frame:true,&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> //渲染面板<br />&nbsp;<wbr>&nbsp;<wbr> height : 110,<br />&nbsp;<wbr>&nbsp;<wbr> width : 300,<br />&nbsp;<wbr>&nbsp;<wbr> applyTo :'panel',<br />&nbsp;<wbr>&nbsp;<wbr> defaultType: 'textfield',&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> //指定容器子元素默认的xtype类型为textfield<br />&nbsp;<wbr>&nbsp;<wbr> defaults : {&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> //设置默认属性<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> msgTarget: 'side'&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> //指定默认的错误信息提示方式<br />&nbsp;<wbr>&nbsp;<wbr> },<br />&nbsp;<wbr>&nbsp;<wbr> items: [<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> {<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> fieldLabel:'用户名',<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> allowBlank :false<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> },<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> {<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> fieldLabel:'密码',<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> allowBlank :false<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> }<br />&nbsp;<wbr>&nbsp;<wbr> ]<br />&nbsp;<wbr> })<br />&nbsp;<wbr>});<br />&lt;/script&gt;<br />&nbsp;<wbr>&nbsp;<wbr> 代码5-14演示了 FormLayout（表单布局）的使用方式，通过表单布局创建的面板与使用FormPanel创建的表单面板功能相同。运行效果如图5-20所示。</p>
<div><img style="margin: 0px 10px 0px 0px" title="ExtJs页面布局总结" alt="ExtJs页面布局总结 - 成功就在脚下 - 成功就在脚下" src="http://img838.ph.126.net/zwXItjsC69cuosHai6Uorw==/816558907439488633.jpg" real_src="http://img838.ph.126.net/zwXItjsC69cuosHai6Uorw==/816558907439488633.jpg" />&nbsp;<wbr><br />图5-20&nbsp;<wbr> Ext.layout.FormLayout布局示例</div>
<p style="text-indent: 2em">8&nbsp;<wbr> ColumnLayout列布局</p>
<p style="text-indent: 2em">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> Ext.layout.ColumnLayout对应面板布局layout配置项的名称为column。这是一种多列风格的布局样式，每一列的宽度都可以根据百分比或固定值来进行设置，高度允许根据内容进行变化，它支持一个特殊的属性 columnWidth，每一个加入到容器中的子面板都可以通过columnWidth配置项指定百分比或使用width配置项指定固定值，来确定列宽。 width 配置项是以像素为单位的固定宽度，必须是大于或等于 1 的数字。columnWidth配置项是已百分比为单位的相对宽度，必须是大于0小于1的小数，例如&#8220;.25&#8221;。<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 注意：所有列的columnWidth值相加必须等于1。<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 1.&nbsp;<wbr> 指定固定列宽<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 代码 5-15 中将创建了包含 2 个子面板的列布局示例，并指定列的固定宽度为 100，看下面的代码。<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 代码5-15：指定固定列宽示例<br />&nbsp;<wbr> &lt;script type="text/javascript"&gt;<br />&nbsp;<wbr>Ext.onReady(function(){<br />&nbsp;<wbr> Ext.BLANK_IMAGE_URL ='../../extjs2.0/resources/images/default/s.gif';<br />&nbsp;<wbr> Ext.QuickTips.init();<br />&nbsp;<wbr> var panel = new Ext.Panel({<br />&nbsp;<wbr>&nbsp;<wbr> title:'Ext.layout.ColumnLayout布局示例',<br />&nbsp;<wbr>&nbsp;<wbr> layout : 'column',<br />&nbsp;<wbr>&nbsp;<wbr> frame:true,//渲染面板<br />&nbsp;<wbr>&nbsp;<wbr> height : 150,<br />&nbsp;<wbr>&nbsp;<wbr> width : 250,<br />&nbsp;<wbr>&nbsp;<wbr> applyTo :'panel',<br />&nbsp;<wbr>&nbsp;<wbr> defaults : {//设置默认属性<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> bodyStyle:'background-color:#FFFFFF;',//设置面板体的背景色<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> frame :true<br />&nbsp;<wbr>&nbsp;<wbr> },<br />&nbsp;<wbr>&nbsp;<wbr> items: [<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> {<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> title:'子面板一',<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> width:100,&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> //指定列宽为100像素<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> height : 100<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> },<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> {<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> title:'子面板二',<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> width:100,&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> //指定列宽为100像素<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> height : 100<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> }<br />&nbsp;<wbr>&nbsp;<wbr> ]<br />&nbsp;<wbr> })<br />&nbsp;<wbr>});<br />&nbsp;<wbr> &lt;/script&gt;<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 代码5-15演示了ColumnLayout（列布局）指定固定列宽的用法，子面板的width配置<br />项用于设置列宽。运行效果如图5-21所示。</p>
<div><img style="margin: 0px 10px 0px 0px" title="ExtJs页面布局总结" alt="ExtJs页面布局总结 - 成功就在脚下 - 成功就在脚下" src="http://img153.ph.126.net/n6Na7ufswYFNW_OGRnYZzQ==/1643813863991775093.jpg" real_src="http://img153.ph.126.net/n6Na7ufswYFNW_OGRnYZzQ==/1643813863991775093.jpg" />&nbsp;<wbr><br />图5-21&nbsp;<wbr> Ext.layout.ColumnLayout布局示例（固定列宽）<br />2.&nbsp;<wbr> 使用百分比指定列宽<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 在代码5-16中将创建了一个包含2个子面板的列布局示例，并分别指定列的相对宽度&nbsp;<wbr>为30%和70%（30%用.3表示,70%用.7表示），看下面的代码。<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 代码5-16：使用百分比指定列宽示例<br />&nbsp;<wbr> &lt;script type="text/javascript"&gt;<br />&nbsp;<wbr>Ext.onReady(function(){<br />&nbsp;<wbr> Ext.BLANK_IMAGE_URL ='../../extjs2.0/resources/images/default/s.gif';<br />&nbsp;<wbr> Ext.QuickTips.init();<br />&nbsp;<wbr> var panel = new Ext.Panel({<br />&nbsp;<wbr>&nbsp;<wbr> title:'Ext.layout.ColumnLayout布局示例',<br />&nbsp;<wbr>&nbsp;<wbr> layout : 'column',<br />&nbsp;<wbr>&nbsp;<wbr> frame:true,//渲染面板<br />&nbsp;<wbr>&nbsp;<wbr> height : 150,<br />&nbsp;<wbr>&nbsp;<wbr> width : 250,<br />&nbsp;<wbr>&nbsp;<wbr> applyTo :'panel',<br />&nbsp;<wbr>&nbsp;<wbr> defaults : {//设置默认属性<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> bodyStyle:'background-color:#FFFFFF;',//设置面板体的背景色<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> frame :true<br />&nbsp;<wbr>&nbsp;<wbr> },<br />&nbsp;<wbr>&nbsp;<wbr> items: [<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> {<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> title:'子面板一',<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> columnWidth:.3,&nbsp;<wbr>&nbsp;<wbr> /指定列宽为容器宽度的30%<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> height : 100<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> },<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> {<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> title:'子面板二',<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> columnWidth:.7,&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> //指定列宽为容器宽度的70%<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> height : 100<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> }<br />&nbsp;<wbr>&nbsp;<wbr> ]<br />&nbsp;<wbr> })<br />&nbsp;<wbr>});<br />&nbsp;<wbr> &lt;/script&gt;<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 代码 5-16 演示了 ColumnLayout（列布局）使用百分比指定列宽的用法，子面板的<br />columnWidth配置项用于设置列对应的百分比。运行效果如图5-22所示。</div>
<div><img style="margin: 0px 10px 0px 0px" title="ExtJs页面布局总结" alt="ExtJs页面布局总结 - 成功就在脚下 - 成功就在脚下" src="http://img458.ph.126.net/zpX-375n9sW25IzPglcQUA==/2554948363603675005.jpg" real_src="http://img458.ph.126.net/zpX-375n9sW25IzPglcQUA==/2554948363603675005.jpg" />&nbsp;<wbr><br />图5-22&nbsp;<wbr> Ext.layout.ColumnLayout布局示例（百分比列宽）<br />3.&nbsp;<wbr> 固定值与百分比结合使用<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 在代码5-17中创建了包含3个子面板的列布局示例，为&#8220;子面板一&#8221;指定固定宽度100，&#8220;子面板二&#8221;相对宽度为30%，&#8220;子面板三&#8221;的相对宽度为70%，请看下面的代码。<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 代码5-17：固定值与百分比结合使用示例<br />&nbsp;<wbr> &lt;script type="text/javascript"&gt;<br />&nbsp;<wbr>Ext.onReady(function(){<br />&nbsp;<wbr> Ext.BLANK_IMAGE_URL ='../../extjs2.0/resources/images/default/s.gif';<br />&nbsp;<wbr> Ext.QuickTips.init();&nbsp;<wbr><br />&nbsp;<wbr> var panel = new Ext.Panel({<br />&nbsp;<wbr>&nbsp;<wbr> title:'Ext.layout.ColumnLayout布局示例',<br />&nbsp;<wbr>&nbsp;<wbr> layout : 'column',<br />&nbsp;<wbr>&nbsp;<wbr> frame:true,//渲染面板<br />&nbsp;<wbr>&nbsp;<wbr> height : 150,<br />&nbsp;<wbr>&nbsp;<wbr> width : 350,<br />&nbsp;<wbr>&nbsp;<wbr> applyTo :'panel',<br />&nbsp;<wbr>&nbsp;<wbr> defaults : {//设置默认属性<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> bodyStyle:'background-color:#FFFFFF;',//设置面板体的背景色<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> frame :true<br />&nbsp;<wbr>&nbsp;<wbr> },<br />&nbsp;<wbr>&nbsp;<wbr> items: [<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> {<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> title:'子面板一',<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> width : 100,&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> //指定列宽为100像素<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> height : 100<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> },<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> {<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> title:'子面板二',<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> columnWidth:.3,&nbsp;<wbr>&nbsp;<wbr> /指定列宽为容器剩余宽度的30%<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> height : 100<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> },<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> {<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> title:'子面板三',<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> columnWidth:.7,&nbsp;<wbr>&nbsp;<wbr> /指定列宽为容器剩余宽度的70%<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> height : 100<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> }<br />&nbsp;<wbr>&nbsp;<wbr> ]<br />&nbsp;<wbr> })<br />&nbsp;<wbr>});<br />&nbsp;<wbr> &lt;/script&gt;<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 在代码5-17中同时使用了固定值和百分比两种方式来指定列宽，通过观察图5-17可以看到，固定值优先于百分比进行计算，也就是说百分比计算的基础宽度是父容器的宽度减去固定列宽之后剩余的宽度值。运行效果如图5-23所示。</div>
<div><img style="margin: 0px 10px 0px 0px" title="ExtJs页面布局总结" alt="ExtJs页面布局总结 - 成功就在脚下 - 成功就在脚下" src="http://img851.ph.126.net/sB7mg02TslfgBrz384RLJw==/2716796475212165782.jpg" real_src="http://img851.ph.126.net/sB7mg02TslfgBrz384RLJw==/2716796475212165782.jpg" />&nbsp;<wbr><br />图5-23&nbsp;<wbr> Ext.layout.ColumnLayout布局示例（固定值与百分比结合）</div>
<p style="text-indent: 2em">&nbsp;<wbr>&nbsp;<wbr> 下面以一个简单的公式进行说明：<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 第一列宽度 =&nbsp;<wbr> 100 （说明，第一列是通过width配置项指定的固定值）。<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 第二列宽度 = （350 &#8211; 100 ）* 0.3 （说明：按比例分割剩余宽度）。<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 第三列宽度 = （350 &#8211; 100 ）* 0.7 （说明：按比例分割剩余宽度）。</p>
<p style="text-indent: 2em">9&nbsp;<wbr> TableLayout表格布局&nbsp;<wbr></p>
<p style="text-indent: 2em">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> Ext.layout.TableLayout对应面板布局layout配置项的名称为table。这种比较允许你非常容易的渲染内容到HTML表格中，可以指定列数（columns），跨行（rowspan），跨列（colspan），可以创建出复杂的表格布局。<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 注意：必须使用layoutConfig属性来指定属于此布局的配置，table布局仅有唯一的布局配置项columns，而包含在其中的子面板会具有rowspan和colspan两个配置项。<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 下面是表格布局的一个简单的示例。<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 代码5-18：TableLayout（表格布局）示例<br />&lt;script type="text/javascript"&gt;<br />&nbsp;<wbr>Ext.onReady(function(){<br />&nbsp;<wbr> Ext.BLANK_IMAGE_URL ='../../extjs2.0/resources/images/default/s.gif';<br />&nbsp;<wbr> var panel = new Ext.Panel({<br />&nbsp;<wbr>&nbsp;<wbr> title:'Ext.layout.TableLayout布局示例',<br />&nbsp;<wbr>&nbsp;<wbr> layout :'table',<br />&nbsp;<wbr>&nbsp;<wbr> layoutConfig :{<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> columns : 4 //设置表格布局默认列数为4列<br />&nbsp;<wbr>&nbsp;<wbr> },<br />&nbsp;<wbr>&nbsp;<wbr> frame:true,//渲染面板<br />&nbsp;<wbr>&nbsp;<wbr> height : 150,<br />&nbsp;<wbr>&nbsp;<wbr> applyTo :'panel',<br />&nbsp;<wbr>&nbsp;<wbr> defaults : {//设置默认属性<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> bodyStyle:'background-color:#FFFFFF;',//设置面板体的背景色<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> frame :true,<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> height : 50<br />&nbsp;<wbr>&nbsp;<wbr> },<br />&nbsp;<wbr>&nbsp;<wbr> items: [<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> {<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> title:'子面板一',<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> colspan : 3&nbsp;<wbr>&nbsp;<wbr> //设置跨列<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> },<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> {<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> title:'子面板二',<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> rowspan :2,&nbsp;<wbr> /设置跨行<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> height : 100<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> },<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> {title:'子面板三'},<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> {title:'子面板四'},<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> {title:'子面板五'}<br />&nbsp;<wbr>&nbsp;<wbr> ]<br />&nbsp;<wbr> })<br />&nbsp;<wbr>});<br />&lt;/script&gt;<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 代码5-18演示了TableLayout（表格布局）的使用方式，其中子面板的colspan和rowspan配置项决定了它跨列和跨行的数量，另外需要指出的是，子面板在父面板中是从上到下由左至右进行顺序排列的。效果如图5-24所示。</p>
<div><img style="margin: 0px 10px 0px 0px" title="ExtJs页面布局总结" alt="ExtJs页面布局总结 - 成功就在脚下 - 成功就在脚下" src="http://img839.ph.126.net/0Bc3QFV6RakwTx2U2LY-6w==/781937485304236144.jpg" real_src="http://img839.ph.126.net/0Bc3QFV6RakwTx2U2LY-6w==/781937485304236144.jpg" />&nbsp;<wbr><br />图5-24&nbsp;<wbr> Ext.layout.TableLayout布局示例</div>
<p style="text-indent: 2em">10&nbsp;<wbr> BorderLayout边框布局</p>
<p style="text-indent: 2em">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> Ext.layout.BorderLayout 对应面板布局 layout 配置项的名称为 border。该布局包含多个子面板，是一个面向应用的UI风格的布局，它将整个容器分为5个部分，分别是：east、south、west、 north、center。加入到容器中的子面板需要指定region 配置项来告知容器要加入到那个部分，并且该布局还内建了对面板分隔栏的支持。下面是边框布局的一个简单的示例。<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 为了进行说明，将在代码5-19中创建一个包含全部border布局部分的示例，这个示例可以形象的展示border布局的结构。<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 代码5-19：BorderLayout（边框布局）示例<br />&nbsp;<wbr> &lt;script type="text/javascript"&gt;<br />&nbsp;<wbr>Ext.onReady(function(){<br />&nbsp;<wbr> Ext.BLANK_IMAGE_URL ='../../extjs2.0/resources/images/default/s.gif';<br />&nbsp;<wbr> var panel = new Ext.Panel({<br />&nbsp;<wbr>&nbsp;<wbr> title : 'Ext.layout.BorderLayout布局示例',<br />&nbsp;<wbr>&nbsp;<wbr> layout:'border',//表格布局<br />&nbsp;<wbr>&nbsp;<wbr> height : 250,<br />&nbsp;<wbr>&nbsp;<wbr> width : 400,<br />&nbsp;<wbr>&nbsp;<wbr> applyTo : 'panel',<br />&nbsp;<wbr>&nbsp;<wbr> items: [<br />&nbsp;<wbr>&nbsp;<wbr> {<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> title: 'northPanel',<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> html : '上边',<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> region: 'north',&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> //指定子面板所在区域为north<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> height: 50<br />&nbsp;<wbr>&nbsp;<wbr> },<br />&nbsp;<wbr>&nbsp;<wbr> {<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> title: 'SouthPanel',<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> html : '下边',<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> region: 'south',&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> //指定子面板所在区域为south<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> height: 50<br />&nbsp;<wbr>&nbsp;<wbr> },{<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> title: 'West Panel',<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> html : '左边',<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> region:'west',&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> //指定子面板所在区域为west<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> width: 100<br />&nbsp;<wbr>&nbsp;<wbr> },{<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> title: 'east Panel',<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> html : '右边',<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> region:'east',&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> //指定子面板所在区域为east<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> width: 100<br />&nbsp;<wbr>&nbsp;<wbr> },{<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> title: 'MainContent',<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> html : '中间',<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> region:'center'&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> //指定子面板所在区域为center<br />&nbsp;<wbr>&nbsp;<wbr> }]<br />&nbsp;<wbr> });<br />&nbsp;<wbr>});<br />&nbsp;<wbr> &lt;/script&gt;<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 运行代码5-19会得到如下页面效果，从图中可以看到整个页面分为5个部分，这里重点是对region配置项的使用，它决定了子面板在border布局的显示，效果如图5-25所示。</p>
<div><img style="margin: 0px 10px 0px 0px" title="ExtJs页面布局总结" alt="ExtJs页面布局总结 - 成功就在脚下 - 成功就在脚下" src="http://img161.ph.126.net/IsbTxZSPEAP1CsBFsET1bg==/2159194546349418472.jpg" real_src="http://img161.ph.126.net/IsbTxZSPEAP1CsBFsET1bg==/2159194546349418472.jpg" /></div></div></div><img src ="http://www.blogjava.net/liuyz2006/aggbug/387305.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/liuyz2006/" target="_blank">阿者</a> 2012-09-08 17:55 <a href="http://www.blogjava.net/liuyz2006/articles/387305.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Ext2.0中的form使用实例  </title><link>http://www.blogjava.net/liuyz2006/articles/386914.html</link><dc:creator>阿者</dc:creator><author>阿者</author><pubDate>Mon, 03 Sep 2012 15:16:00 GMT</pubDate><guid>http://www.blogjava.net/liuyz2006/articles/386914.html</guid><wfw:comment>http://www.blogjava.net/liuyz2006/comments/386914.html</wfw:comment><comments>http://www.blogjava.net/liuyz2006/articles/386914.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/liuyz2006/comments/commentRss/386914.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/liuyz2006/services/trackbacks/386914.html</trackback:ping><description><![CDATA[<div class="multicntwrap">
<div class="multicnt">
<div>
<h3 class="title pre fs1"><span class="tcnt"><font face="微软雅黑" size="5">Ext2.0中的form使用实例</font></span>&nbsp;&nbsp;<span class="bgc0 fc07 fw0 fs0"></span></h3></div></div></div>
<div></div>
<div class="nbw-blog-start"></div>
<div class="bct fc05 fc11 nbw-blog ztag js-fs2" __1346684474890__="ev_2241704611">
<p>Ext2.0的form不单增加了时间输入控件、隐藏输入控件，还修改了创建方法，通过formpanel代替了原来form，column也根据新的布局定义更新了定义方式。总体来说，定义一个form更简单便捷了。本文将通过一个实例介绍一下2.0的form的创建以及其大部分控件的使用方法，因水平有限，错漏难免，忘大家多多谅解！</p>
<p>我们先来看看我们将要设计的form的情况：</p>
<p>&nbsp;<img height="390" alt="" src="http://www.2ky.cn/uploads/allimg/090211/1Q501N28-0.jpg" width="553" __1346684474890__="ev_6837251467" /></p>
<p>呵呵，form有点杂乱，不过在这个fomr里包含了绝大部分Ext2.0的控件，我将会和大家一起探讨一下这些控件的使用。</p>
<p>在创建一个form之前，我们先增加以下语句：</p>
<p>Ext.QuickTips.init(); <br />Ext.form.Field.prototype.msgTarget = 'side';</p>
<p>&nbsp;第一句的目的是为需要的元件提供提示信息功能，form的主要提示信息就是客户端验证的错误信息了。</p>
<p>第二句的目的就是设置控件的错误信息显示位置，主要可选的位置有：</p>
<table style="border-right: medium none; border-top: medium none; border-left: medium none; border-collapse: collapse" cellspacing="0" cellpadding="0" border="1">
<tbody>
<tr>
<td style="border-right: windowtext 1pt solid; border-top: windowtext 1pt solid;background: rgb(230,230,230) 0% 50%; border-left: windowtext 1pt solid; moz-background-clip: border; moz-background-origin: padding; moz-background-inline-policy: continuous" valign="top">
<p align="center">位置值</p></td>
<td style="border-right: windowtext 1pt solid; border-top: windowtext 1pt solid;background: rgb(230,230,230) 0% 50%; border-left: medium none; moz-background-clip: border; moz-background-origin: padding; moz-background-inline-policy: continuous" valign="top">
<p align="center">描述</p></td></tr>
<tr>
<td style="border-right: 1pt solid; border-top: medium none; border-left: 1pt solid" valign="top"><pre>qtip</pre></td>
<td style="border-right: 1pt solid; border-top: medium none; border-left: medium none" valign="top">
<p>当鼠标移动到控件上面时显示提示</p></td></tr>
<tr>
<td style="border-right: 1pt solid; border-top: medium none; border-left: 1pt solid" valign="top">
<p>title</p></td>
<td style="border-right: 1pt solid; border-top: medium none; border-left: medium none" valign="top">
<p>在浏览器的标题显示，但是测试结果是和qtip一样的</p></td></tr>
<tr>
<td style="border-right: 1pt solid; border-top: medium none; border-left: 1pt solid" valign="top">
<p>under</p></td>
<td style="border-right: 1pt solid; border-top: medium none; border-left: medium none" valign="top">
<p>在控件的底下显示错误提示</p></td></tr>
<tr>
<td style="border-right: 1pt solid; border-top: medium none; border-left: 1pt solid" valign="top">
<p>side</p></td>
<td style="border-right: 1pt solid; border-top: medium none; border-left: medium none" valign="top">
<p>在控件右边显示一个错误图标，鼠标指向图标时显示错误提示</p></td></tr>
<tr>
<td style="border-right: 1pt solid; border-top: medium none; border-left: 1pt solid" valign="top"><pre>[element id]</pre></td>
<td style="border-right: 1pt solid; border-top: medium none; border-left: medium none" valign="top">
<p>错误提示显示在指定id的HTML元件中</p></td></tr></tbody></table>
<p>这个大家可以根据各人喜好设置，我习惯使用&#8220;side&#8221;，这里有一点要注意的，就是注意控制控件的宽度，以防不够宽度显示错误图标，这个下面会说到。</p>
<p>好了，现在创建我们的form，2.0的方法就是直接创建一个formpanel：</p>
<p>&nbsp;var simpleForm = new Ext.FormPanel({ <br />labelAlign: 'left', <br />title: '表单例子', <br />buttonAlign:'right', <br />bodyStyle:'padding:5px', <br />width: 600, <br />frame:true, <br />labelWidth:80, <br />items: [], <br />buttons: [] <br />}); <br />simpleForm.render(document.body); </p>
<p>在formpanle里，我们定义了form控件的标题是在左边的（labelAlign: 'left'）；form的标题栏显示标题&#8220;表单的例子&#8221;；它的按钮位置是在右对齐的（buttonAlign:'right'）；边的类型设置了内补丁 5px（bodyStyle:'padding:5px'）；总宽度是600px；设置了面板的边角是圆弧过度的（frame:true），我设置这个属性主要目的不是因为边角，而是因为背景，如果不设置这个，背景颜色将为白色，设置了这个将会加入海蓝色的背景图，好看点；还设置了form控件的标题宽度是80px（labelWidth:80）。还有一些其它的设置选项，我这里就不多说，大家可以参看2.0的API。</p>
<p>items数组的设置是我们的重点了，form上的所有控件都是在这里设置的。</p>
<p>从form的结构图中看到，form整体上是分了两列的（实际上不是的，呵呵）。因为要分列，所以要使用columnLayout类。在使用 columnLayout类之前，我们需要了解一下CSS中float属性的作用，改属性主要作用是设置对象是否及如何浮动，属性值为none、left 和right三个。column设置是left，意思就是对象浮在左边的。那这个有什么作用呢？其实这个和我们在word中输入文字，默认文字是左对齐的，当一行文字的宽度超过页面的宽度时将自动换行是一样的。 我们通过一个例子来说明一下。</p>
<p>首先我们定义一个div，背景色是黑色，宽度和高度都是200：</p>
<p>&nbsp;&lt;div style='background:black;width:200px;height:200px;'&gt; <br />&lt;/div&gt; </p>
<p>然后在里面加入2个div，每个宽度和高度都是200，背景色一个是红色，一个是绿色：</p>
<p>&lt;div style='background:black;width:200px;height:200px;'&gt; <br />&lt;div style='background:red;width:50px;height:50px;'&gt;&lt;/div&gt; <br />&lt;div style='background:green;width:50px;height:50px;'&gt;&lt;/div&gt; <br />&lt;/div&gt; <br /></p>
<p>我们来看看效果：</p>
<p>&nbsp;<img height="281" alt="" src="http://www.2ky.cn/uploads/allimg/090211/1Q5015a0-1.jpg" width="279" __1346684474890__="ev_3057810638" /></p>
<p>在没有使用float之前，两个子div是分别各占一行的。好，现在我们在两个子div中加入&#8220;float:left&#8221;在看看效果：</p><pre>&lt;div style='background:black;width:200px;height:200px;'&gt; <br /><br />&lt;div style='background:red;width:50px;height:50px;float:left;'&gt;&lt;/div&gt; <br /><br />&lt;div style='background:green;width:50px;height:50px;float:left;'&gt;&lt;/div&gt; <br /><br />&lt;/div&gt; </pre><pre><img height="277" alt="" src="http://www.2ky.cn/uploads/allimg/090211/1Q50143a-2.jpg" width="283" __1346684474890__="ev_6856642136" /></pre>
<p>两个子div出现在同一行了。我们复制一下两个子div，粘贴两次，然后看看效果：</p>
<p>&nbsp;&lt;div style='background:black;width:200px;height:200px;'&gt;<br />&lt;div style='background:red;width:50px;height:50px;float:left;'&gt;&lt;/div&gt; <br />&lt;div style='background:green;width:50px;height:50px;float:left;'&gt;&lt;/div&gt; <br />&lt;div style='background:red;width:50px;height:50px;float:left;'&gt;&lt;/div&gt; <br />&lt;div style='background:green;width:50px;height:50px;float:left;'&gt;&lt;/div&gt; <br />&lt;div style='background:red;width:50px;height:50px;float:left;'&gt;&lt;/div&gt; <br />&lt;div style='background:green;width:50px;height:50px;float:left;'&gt;&lt;/div&gt; <br />&lt;/div&gt; </p>
<p><img height="279" alt="" src="http://www.2ky.cn/uploads/allimg/090211/1Q501G58-3.jpg" width="279" __1346684474890__="ev_8357433791" /></p>
<p>&nbsp;6个子div有序的按左对齐方式排列在一起了，当一行的子div的宽度超过了父div的宽度时，子div自动换行到了第二行。</p>
<p>不知道大家是否看得明白？看不明白自己再动手改变一下子div的宽度和高度，看看效果。column的工作方式就是这样的。明白这个很重要，因为在定义checkbox和radio的时候，如果想它们的选项在同一行，就要注意column的宽度，不然就无法让他们在同一行。不过现在column是通过百分比来定义宽度的，我们只要控制好百分比就行了。</p>
<p>好了，我们继续写form，因为要用到column，所以我们先在formpanel的itmes加入一个column的定义：</p>
<p>{<br />layout:'column', <br />border:false,<br />labelSeparator:'：',<br />items:[]<br />}</p>
<p>&nbsp;代码里定义了在这里使用的是columnlayout（layout:'column'）；没有边（border:false）；标题的分隔符号我们用中文冒号代替英文的冒号（labelSeparator:'：'）。coulmnLayout里的控件将定义在items里。</p>
<p>我们首先在items里加入一个常用输入控件，是用来输入姓名的：</p>
<p>{ <br />columnWidth:.5, <br />layout: 'form', <br />border:false, <br />items: [{ <br />xtype:'textfield', <br />fieldLabel: '姓名', <br />name: 'name', <br />anchor:'90%' <br />}] <br />} <br /></p>
<p>&nbsp;我们设置了该列的宽度占总宽度的50%（columnWidth:.5）；在布局里放了一个formlayout用来放置控件（layout: 'form'）；formlayout也是没有边的（border:false）。在formlayout里有一个类型为 textfield'（xtype:'textfield'）的输入控件。控件标题为姓名（fieldLabel: '姓名'），输入框（input）的name属性设置&#8220;name&#8221;（name: 'name'），输入框的长度为列宽减去标题的宽度后的90%（anchor:'90%'），余下的10%的是给显示错误信息图标用的。</p>
<p>在加入性别的radio控件时就要注意了，这里需要加入两个radio，第一radio是有标题的，第二是没有的，而且两个radio加起来的宽度应该正好是余下的列宽（50%）：</p>
<p>&nbsp;从代码中可以看到，除了列宽设置为25%外，其它的列设置和第一控件是一样。Formlayout里加入了一个类型为radio的控件。控件的标题是性别，控件的选择显示文本是男（boxLabel:'男），input的name属性值是sex（name: 'sex'），该控件默认是已选的（checked:true），控件的值（value）是男（inputValue:'男'），input的宽度是 95%。在这里我还设置一个css属性，顶部的外补丁为5px（style:'margin-top:5px'），原因是为了选择按钮和标题对齐，大家可以将该属性去掉然后看看效果。</p>
<p>第二个raido控件的列设置就有所不同，因为它不需要标题，所以要设置隐藏标题（hideLabels:true），标题的宽度设置为 0（labelWidth:0）,还要设置其标题分隔符号为空（labelSeparator:''）。其余的设置和第一个radio的设置没有不同，只是input的值不同了。</p>
<p>我们已经设置了3列，3列的列宽分别为50%、25%、25%，根据float的原则，下一列将从第二行开始。</p>
<p>在第二行第一列我们要增加的是一个日期选择控件：</p><pre><p>{</p><p>columnWidth:.25,</p><p>layout: 'form',</p><p>border:false,</p><p>items: [{</p><p>style:'margin-top:5px',</p><p>xtype:'radio',</p><p>fieldLabel: '性别',</p><p>boxLabel:'男',</p><p>name: 'sex',</p><p>checked:true,</p><p>inputValue:'男',</p><p>anchor:'95%'</p><p>}]</p><p>},{</p><p>columnWidth:.25,</p><p>layout: 'form',</p><p>labelWidth:0,</p><p>labelSeparator:'',</p><p>hideLabels:true,</p><p>border:false,</p><p>items: [{</p><p>style:'margin-top:5px',</p><p>xtype:'radio',</p><p>fieldLabel: '',</p><p>boxLabel:'女',</p><p>name: 'sex',</p><p>inputValue:'女',</p><p>anchor:'95%'</p><p>}]</p><p>}</p><p>{ <br />columnWidth:.5, <br /><br />layout: 'form', <br /><br />border:false, <br /><br />items: [{ <br /><br />xtype:'datefield', <br /><br />fieldLabel: '出生日期', <br /><br />name: 'birthday', <br /><br />anchor:'90%' <br /><br />}] <br /><br />} <br />日期控件的列宽也是50%，列的其它设置没有变化。控件的类型为datefield，标题是出生日期，input的name属性是birthday，intput宽度也是设置了90%，出来留出空位给错误信息外，还可以让控件与上一行的姓名的宽度相同，整列看起来比较整齐。</p></pre>
<p>日期控件的设置和普通文本输入的设置一样简单，这里就不多说了。不过要说到的是汉化的问题。在2.0版自带的本地化文件ext-lang-zh.js中存在一些小bug，我们需要自己修改一下。</p>
<p>首先要修改的是周的显示，原来的定义是：</p>
<p>&nbsp;因为在日期选择中显示的区域不够宽，只能显示一个汉字，所以需要将上面定义的把&#8220;周&#8221;去掉，修改为：</p><pre>Date.dayNames = [ <br /><br />"周日", <br /><br />"周一", <br /><br />"周二", <br /><br />"周三", <br /><br />"周四", <br /><br />"周五", <br /><br />"周六" <br /><br />]; <br /></pre>
<p>&nbsp;Date.dayNames = [ <br />"日", <br />"一", <br />"二", <br />"三", <br />"四", <br />"五", <br />"六" <br />]; </p>
<p>在年份和月份选择中的按钮文字还是英文&#8220;ok&#8221;和&#8220;cancel&#8221;的，这里我们也需要修改一下：</p>
<p>&nbsp;if(Ext.DatePicker){ <br />Ext.apply(Ext.DatePicker.prototype, { <br />todayText : "今天", <br />minText : "日期在最小日期之前", <br />maxText : "日期在最大日期之后", <br />disabledDaysText : "", <br />disabledDatesText : "", <br />monthNames : Date.monthNames, <br />dayNames : Date.dayNames, <br />nextText : '下月 (Control Right)', <br />prevText : '上月 (Control Left)', <br />monthYearText : '选择一个月 (Control Up/Down 来改变年)', <br />todayTip : "{0} (Spacebar)", <br />okText : "确定", <br />cancelText : "取消", <br />format : "y年m月d日" <br />}); <br />} </p>
<p>上面定义中黑色字体部分就是要加入的代码。如果不喜欢默认格式是&#8220;y年m月d日&#8221;，需要修改：</p>
<p>&nbsp;if(Ext.form.DateField){ <br />Ext.apply(Ext.form.DateField.prototype, { <br />disabledDaysText : "禁用", <br />disabledDatesText : "禁用", <br />minText : "该输入项的日期必须在 {0} 之后", <br />maxText : "该输入项的日期必须在 {0} 之前", <br />invalidText : "{0} 是无效的日期 - 必须符合格式： {1}", <br />format : "Y-m-d" <br />}); <br />} <br />修改DatePicker不会改变DateField的格式的，这个自己根据情况决定，呵呵。</p>
<p>我们继续，现在需要加入一个学历的下拉选择控件。下来选择控件最重要的一个定义就是数据的定义的，数据定义错误，可能得不到我们需要的效果，也是很多朋友感觉最麻烦的地方。</p>
<p>&nbsp;{ <br />columnWidth:.5, <br />layout: 'form', <br />border:false, <br />items: [{ <br />xtype:'combo', <br />store: new Ext.da<wbr>ta.SimpleStore( <br />{ <br />fields: ["retrunValue", "displayText"], <br />da<wbr>ta: [[1,'小学'],[2,'初中'],[3,'高中'],[4,'中专'],[5,'大专'],[6,'大学']] <br />}), <br />valueField :"retrunValue", <br />displayField: "displayText", <br />mode: 'local', <br />forceSelection: true, <br />blankText:'请选择学历', <br />emptyText:'选择学历', <br />hiddenName:'education', <br />editable: false, <br />triggerAction: 'all', <br />allowBlank:false, <br />fieldLabel: '学历', <br />name: 'education', <br />anchor:'90%' <br />}] <br />} </p>
<p>列的定义就不说了，没变化。在items里，类型设置成combo了，在这里定义了一个sotre属性，就是选择值存储的地方，因为是在客户端的数据，所以使用了一个简单存储（SimpleStore）。在存储里，我们通过一个数组定义了retrunValue和displayText两个字段。 retrunValue字段指定是提交给后台的值，displayText字段指定是在下拉中显示的选择值。然后我们在da<wbr>ta里定义了几组数据（da<wbr>ta: [[1,'小学'],[2,'初中'],[3,'高中'],[4,'中专'],[5,'大专'],[3,'大学']]），我们可以看到，每组数据都是根据 fiedls的定义来组成的，数组里第一个值就是retrunValue的值，第二个值就是displayText的值，例如[1,'小学']，就表示 retrunValue是1，displayText是小学。</p>
<p>下面就是很重要的一步了，设置下拉选择框的值和显示文本。本例中设置了下拉选择框的提交值对象的是存储中的retrunValue字段（valueField :"retrunValue"），显示文本是存储中的displayText字段（displayField: "displayText"），通过这两个设置就可将存储中的数据和下拉框对应起来。</p>
<p>因为数据是在本地，所以设置了模式为local（mode: 'local'）。该下拉列表只允许选择，不允许输入（editable: false），而且是必须选择一个选项（forceSelection: true）。在没有选择值时显示为选择学历（emptyText:'选择学历'）。提交form时，该项如果没有选择，则提示错误信息&#8220;请选择学历&#8221; （blankText:'请选择学历'）。该选项值不允许为空（allowBlank:false）。<strong>大家要注意的是</strong><strong>hiddenName</strong><strong>和name</strong><strong>属性，name</strong><strong>只是改下拉的名称，作用是可通过，而hiddenName</strong><strong>才是提交到后台的input</strong><strong>的name</strong><strong>。如果没有设置hiddenName</strong><strong>，在后台是接收不到结构的，这个大家一定要注意。</strong></p>
<p>因为这个下拉是只能选择的，所以一定要设置属性triggerAction为all，不然当你选择了某个选项后，你的下拉将只会出现匹配选项值文本的选择项，其它选择项是不会再显示了，这样你就不能更改其它选项了。</p>
<p>如果要为控件设置默认值，就设置属性value，value的值要设置为提交给后台的值，不要设置为显示文本。例如本例要设置大学为默认值得，则设置value的值为6。</p>
<p>现在到第三行了，我们要创建一个checkbox选项输入：</p>
<p>&nbsp;{ <br />columnWidth:.35, <br />layout: 'form', <br />border:false, <br />items: [{ <br />xtype:'checkbox', <br />fieldLabel: '权限组', <br />boxLabel:'系统管理员', <br />name: 'popedom', <br />inputValue:'1', <br />anchor:'95%' <br />}] <br />},{ <br />columnWidth:.2, <br />layout: 'form', <br />labelWidth:0, <br />labelSeparator:'', <br />hideLabels:true, <br />border:false, <br />items: [{ <br />xtype:'checkbox', <br />fieldLabel: '', <br />boxLabel:'管理员', <br />name: 'pepedom', <br />inputValue:'2', <br />anchor:'95%' <br />}] <br />},{ <br />columnWidth:.2, <br />layout: 'form', <br />labelWidth:0, <br />labelSeparator:'', <br />hideLabels:true, <br />border:false, <br />items: [{ <br />xtype:'checkbox', <br />fieldLabel: '', <br />boxLabel:'普通用户', <br />name: 'pepedom', <br />inputValue:'3', <br />anchor:'95%' <br />}] <br />},{ <br />columnWidth:.25, <br />layout: 'form', <br />labelWidth:0, <br />labelSeparator:'', <br />hideLabels:true, <br />border:false, <br />items: [{ <br />xtype:'checkbox', <br />fieldLabel: '', <br />boxLabel:'访客', <br />name: 'pepedom', <br />inputValue:'4', <br />anchor:'95%' <br />}] <br />} <br />checkbox的设置和radio的设置大同小异，大家注意列宽的定义就行。</p>
<p>第四行的两个输入框主要是测试通过vtypes属性来验证输入框的输入的：</p>
<p>&nbsp;{ <br />columnWidth:.5, <br />layout: 'form', <br />border:false, <br />items: [{ <br />xtype:'textfield', <br />fieldLabel: '电子邮件', <br />name: 'email', <br />vtype:'email', <br />allowBlank:false, <br />anchor:'90%' <br />}] <br />},{ <br />columnWidth:.5, <br />layout: 'form', <br />border:false, <br />items: [{ <br />xtype:'textfield', <br />fieldLabel: '个人主页', <br />name: 'url', <br />vtype:'url', <br />anchor:'90%' <br />}] <br />}] <br />} </p>
<p>这里的定义和普通的文本输入框没什么区别，只是多了一个vtypes的属性定义。Vtypes里总共定义了email、url、alpha和 alphanum四种类型数据格式，email和url这个不用介绍了，呵呵。alpha是字母和下划线的组合，alphanum是字母、下划线和数字的组合。</p>
<p>下面要加入一个tabpanel，加入3个tab页。</p>
<p>&nbsp;{ <br />xtype:'tabpanel', <br />plain:true, <br />activeTab: 0, <br />height:235, <br />defaults:{bodyStyle:'padding:10px'},<br />items:[] <br />} </p>
<p>要注意的是，这个tabpanel不是在上面coulmn的items里加的，因为不在column里。我们加在formpanel里。把item 类型设置为'tabpanel'就行了，然后将标签页头的背景设置为透明的（plain:true），当前活动的标签页是第一页（activeTab: 0），高度设置为235px（height:235），tab页的面板使用内补丁10px（defaults: {bodyStyle:'padding:10px'}）。</p>
<p>好了，现在在tabpanel的items加入标签页。第一页主要有两个输入控件，一个是vtypes类型alphanum的登录输入框和一个密码输入框。</p>
<p>&nbsp;{ <br />title:'登录信息', <br />layout:'form', <br />defaults: {width: 230}, <br />defaultType: 'textfield', <br />items: [{ <br />fieldLabel: '登录名', <br />name: 'loginID', <br />allowBlank:false, <br />vtype:'alphanum', <br />allowBlank:false <br />},{ <br />inputType:'password', <br />fieldLabel: '密码', <br />name: 'password', <br />allowBlank:false <br />}] <br />} </p>
<p>在标签定义了，设置了标签标题是登录信息（title:'登录信息'），控件容器是formlayout（layout:'form'），控件的默认宽度是230px（defaults: {width: 230}），默认控件类型是textfield（defaultType: 'textfield'）。</p>
<p>两个控件的定义与前面的textfield定义没什么区别，只是密码输入框需要定义input控件的类型为password（inputType:'password'）。两个控件都不允许为空（allowBlank:false）。</p>
<p>第二个标签页里有numberfield、timefield和textfield三个控件：</p>
<p>&nbsp;{ <br />title:'数字时间字母', <br />layout:'form', <br />defaults: {width: 230}, <br />defaultType: 'textfield', <br />items: [{ <br />xtype:'numberfield', <br />fieldLabel: '数字', <br />name: 'number' <br />},{ <br />xtype:'timefield', <br />fieldLabel: '时间', <br />name: 'time' <br />},{ <br />fieldLabel: '纯字母', <br />name: 'char', <br />vtype:'alpha' <br />}] <br />} </p>
<p>Numberfield顾名思义就是只能输入数字的输入控件。在该例子，没做最大值、最小值任何限制，如果要设置最大值和最小值，分别设置 maxValue和minValue两个属性就行了。如果要设置数字输入长度，例如身份证号码，可以设置maxLength和minLength两个属性。可以通过设置maxText、minText、maxLengthText和minLengthText设置各自的验证出错信息。可通过 allowDecimals属性设置是否只允许输入整型值，默认值是true，允许输入浮点数。设置allowNegative设置是否只允许输入正数，默认值是true，允许输入正负数。通过decimalPrecision属性可设置小数点后的位数，默认值是2位。</p>
<p>timefield是新增加的时间输入控件，起弥补日期输入控件不能输入时间的作用。它的定义也很简单，设置类型为timefield就行了。 timefield默认时间格式是12小时制的，我们可通过修改format属性来修改其数据格式。通过设置increment属性可设置下拉选择值得时间区间，默认值是15分钟的。还可以和数字输入控件一样设置最大值和最小值。下拉的设置和combobox是一样的。</p>
<p>在目前的版本中，timefield类还没有汉化，所以我们要在本地文件中加入timefield的汉化定义：</p>
<p>&nbsp;if(Ext.form.TimeField){ <br />Ext.apply(Ext.form.TimeField.prototype, { <br />format:'G:i:s', <br />minText : "该输入项的时间必须大于或等于： {0}", <br />maxText : "该输入项的时间必须小于或等于： {0}", <br />invalidText : "{0}不是有效的时间", <br />}); <br />} </p>
<p>在这里，我默认定义了时间格式是24小时制的，小时为个位数是不加前缀0。</p>
<p>最后一个加入的是测试纯字母输入的，和email等是一样的，我就不介绍了。</p>
<p>在最后一个tab页中加入了一个textarea输入：</p>
<p>&nbsp;{ <br />title:'文本区域', <br />layout:'fit', <br />items: { <br />xtype:'textarea', <br />id:'area', <br />fieldLabel:'' <br />} <br />}</p>
<p>和textfield一样，只要设置类型为textarea就可以了，唯一的区别是为了让textarea和面板自适应面板，使用了fitlayout作为它的容器，所以在这里我们不用设置textarea的宽度和高度。</p>
<p>最后一步就是为form添加按钮了，在formpanel的buttons属性中我们加入了一个保存按钮和取消按钮：</p>
<p>&nbsp;buttons: [{ <br />text: '保存', <br />handler:function(){ <br />if(simpleForm.form.isValid()){ <br />this.disabled=true; <br />simpleForm.form.doAction('submit',{ <br />url:'test.asp', <br />method:'post', <br />params:'', <br />success:function(form,act<wbr>ion){ <br />Ext.Msg.alert('操作',act<wbr>ion.result.da<wbr>ta); this.disabled=false; <br />}, <br />failure:function(){ <br />Ext.Msg.alert('操作','保存失败！'); <br />this.disabled=false; <br />} <br />}); <br />} <br />} <br />},{ <br />text: '取消', <br />handler:function(){simpleForm.form.reset();} <br />}] </p>
<p>在formpanel类中，form属性指向的是formpanle里的basicform对象，我们可通过formpanle.form来使用该 basicform对象。在被例子，我们已经将formpanel对象赋值给了simpleForm这个变量，所以我们可以通过 simpleForm.form访问面板里的basicform对象。</p>
<p>在buttons里定义的按钮默认是Ext.Button，所以按钮的属性定义可以查看Ext.Button的API。在这里两个按钮都没用到其它属性，只是设置了显示文本（text）和单击事件。</p>
<p>保存按钮要做的就是先做basicform的客户端验证（simpleForm.form.isValid()），验证通过了则设置该按钮状态为 disable，防止2次提交。然后调用simpleForm.form.doAction方法提交数据。doAction方法的第一个参数 &#8220;submit&#8221;的意思是表示执行的是提交操作，提交的后台页面是test.asp（url:'test.asp'），提交方式是 post（method:'post'），没有其它提交参数（params:''），提交成功后执行success定义的函数，本例只是显示一个保存成功信息。<strong>后台返回的数据格式是需要我们注意的，一定要</strong><strong>json</strong><strong>格式，而且必须包含&#8220;success:true</strong><strong>&#8221;，不然不会执行success</strong><strong>定义的函数。</strong>success 定义的函数返回两个参数，第一是form本身，第二个是ajax返回的响应结果，在act<wbr>ion.result这个json数组了保存了后台返回的数据。例如本例后台返回的json结构是&#8220;{success:true,da<wbr>ta:~~~}&#8221;，其中da<wbr>ta部分我将提交的数据将字段名和数据组合成一个字符串。在success函数中，我通过&#8220;Ext.Msg.alert('操作',act<wbr>ion.result.da<wbr>ta);&#8221;将da<wbr>ta数据显示出来。我们还定义failure函数，就是网络通讯存在问题的时候将显示错误信息。</p>
<p>取消按钮就是简单的reset一下form的控件。</p>
<p>如果想form按以前的老办法提交，可以在formpanel的定义中加入一下设置：</p>
<p>&nbsp;on<wbr>Submit: Ext.emptyFn, <br />submit: function() { this.getEl().dom.submit();} <br />第一个设置的目的是取消formpanel的默认提交函数。第二就是设置新的提交方式为旧方式提交。</p></div><img src ="http://www.blogjava.net/liuyz2006/aggbug/386914.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/liuyz2006/" target="_blank">阿者</a> 2012-09-03 23:16 <a href="http://www.blogjava.net/liuyz2006/articles/386914.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>引用 Ext.Panel面板  </title><link>http://www.blogjava.net/liuyz2006/articles/386913.html</link><dc:creator>阿者</dc:creator><author>阿者</author><pubDate>Mon, 03 Sep 2012 15:15:00 GMT</pubDate><guid>http://www.blogjava.net/liuyz2006/articles/386913.html</guid><wfw:comment>http://www.blogjava.net/liuyz2006/comments/386913.html</wfw:comment><comments>http://www.blogjava.net/liuyz2006/articles/386913.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/liuyz2006/comments/commentRss/386913.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/liuyz2006/services/trackbacks/386913.html</trackback:ping><description><![CDATA[<div class="multicntwrap">
<div class="multicnt">
<div>
<h3 class="title pre fs1"><span class="tcnt"><font face="微软雅黑" size="5">引用 Ext.Panel面板</font></span>&nbsp;&nbsp;<span class="bgc0 fc07 fw0 fs0"></span></h3></div></div></div>
<div></div>
<div class="nbw-blog-start"></div>
<div class="bct fc05 fc11 nbw-blog ztag js-fs2" __1346683593140__="ev_6313999578">
<p>&nbsp;</p>
<p><br />使用过Delphi、Visual Basic或Java Swing等开发语言的读者对面板（Panel）一定非常熟悉，我们可以在面板随意地排版布局，它就像是一副骨架撑起了整个用户界面，在ExtJS中面板同样起着页面骨架的作用，所以学习面板是学习ExtJS页面布局的基础和起点。 ExtJS面板从使用方式上来说更接近于Java Swing中的面板，通过为其指定不同的布局方式或者进行面板嵌套达到复杂布局的目的，因此布局方式是否丰富，能否进行嵌套，是衡量ExtJS布局灵活性的重要指标。ExtJS面板共支持10种不同风格的布局样式，并且允许无限制的进行嵌套，这就给我们创造了一个尽情发挥的强大舞台。&nbsp;<br /><br /><strong>一、认识Ext.Panel <br /></strong><br />&nbsp;&nbsp;&nbsp; Ext.Panel扩展自Ext.Container，是各种组件的容器也是基础类，可以扩展出功能更加强大的面板。作为标准的面板组件主要包括如下5部分：底部工具栏（bottom toolbars）、顶部工具栏（top toolbars）、面板头部（header）、面板底部（footer）和面板体（body），下面是一个标准面板的示例，可以帮助读者更清晰的认识面板组件。&nbsp;<br />&nbsp;&nbsp;&nbsp; 代码5-1：Ext.Panel示例 <br />&nbsp;&nbsp;&nbsp; &lt;script type="text/javas<wbr>cript"&gt; <br />Ext.on<wbr>Ready(function(){ <br />&nbsp; Ext.BLANK_IMAGE_URL ='../../extjs2.0/resources/images/default/s.gif'; <br />&nbsp; new Ext.Panel({ <br />&nbsp;&nbsp; title:'面板头部（header）', <br />&nbsp;&nbsp; tbar : ['顶端工具栏(top toolbars)'], <br />&nbsp;&nbsp; bbar : ['底端工具栏(bottom toolbars)'], <br />&nbsp;&nbsp; height:200, <br />&nbsp;&nbsp; width:300, <br />&nbsp;&nbsp; frame:true, <br />&nbsp;&nbsp; applyTo :'panel', <br />&nbsp;&nbsp; bodyStyle:'background-color:#FFFFFF', <br />&nbsp;&nbsp; html:'&lt;div&gt;面板体（body）&lt;/div&gt;', <br />&nbsp;&nbsp; tools : [//设置面板头部功能区 <br />&nbsp;&nbsp;&nbsp; {id:'toggle'}, <br />&nbsp;&nbsp;&nbsp; {id:'close'}, <br />&nbsp;&nbsp;&nbsp; {id:'maximize'} <br />&nbsp;&nbsp; ], <br />&nbsp;&nbsp; buttons:[ <br />&nbsp;&nbsp;&nbsp; new Ext.Button({ <br />&nbsp;&nbsp;&nbsp;&nbsp; text:'面板底部（footer）' <br />&nbsp;&nbsp;&nbsp; }) <br />&nbsp;&nbsp; ] <br />&nbsp; }) <br />&nbsp;}); <br />&nbsp; &lt;/script&gt; <br />&nbsp;&nbsp;&nbsp; 代码5-1演示了标准面板的创建方式，从图5-1中可以看到一个标准面板所具有的全部组成部分，这5部分不但位置不同功能也不尽相同，它们分别有自己存在的价值，读者可以根据业务需要选择使用其中合适的部分构成自己需要的页面。效果如图5-1所示。<br /><img alt="Ext.Panel面板 - ht_19820316 - ht_19820316的博客" src="http://www.myext.cn/Article/UploadFiles/200906/2009061022561949.jpg" __1346683593140__="ev_1104197990" /><br /><br /><strong>二、Ext.Panel 的主要功能</strong><br />上节介绍了ExtJS面板的主要表现形式，接下来将介绍面板组件的主要配置项及常用方法，这些配置项及方法将在后面的示例中用到，可以把这部分内容作为后续章节的铺垫，进行快速的浏览，Ext.Panel主要配置项目如表5-1所示。 </p>
<blockquote>
<p align="center"><br />表5-1&nbsp; Ext.Panel主要配置项目表表</p>
<p align="center">
<table cellspacing="0" cellpadding="0" border="1">
<tbody>
<tr>
<td>
<p align="center">&nbsp;配置项</p></td>
<td>&nbsp;参数类型</td>
<td>&nbsp;说明</td></tr>
<tr>
<td>&nbsp;animCollapse</td>
<td>&nbsp;Boolean</td>
<td>&nbsp;设置面板折叠或展开时是否显示动画效果，如果 Ext.Fx 类可用则默认<br />为true，否则为fasle。</td></tr>
<tr height="21">
<td width="97" rowspan="2"><font face="TimesNewRomanPS-BoldMT"><font style="font-size: 9pt">applyTo </font></font></td>
<td width="108" rowspan="2"><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">Mixed </font></font></td>
<td width="422" rowspan="2"><font face="SimSun"><font style="font-size: 9pt">一个页面上已经存在的元素或元素</font></font><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">id</font></font><font face="SimSun"><font style="font-size: 9pt">，组件将会追加到该元素的后面，而不是将其作为新组件的容器。</font></font></td></tr>
<tr height="23"></tr>
<tr height="24">
<td width="97"><font face="TimesNewRomanPS-BoldMT"><font style="font-size: 9pt">autoDestroy </font></font></td>
<td width="108"><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">Boolean </font></font></td>
<td width="422"><font face="SimSun"><font style="font-size: 9pt">设置是否自动销毁从容器中移除的组件，默认为</font></font><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">true</font></font><font face="SimSun"><font style="font-size: 9pt">，否则要手工销毁</font></font></td></tr>
<tr height="23">
<td width="97"><font face="TimesNewRomanPS-BoldMT"><font style="font-size: 9pt">autoHeight </font></font></td>
<td width="108"><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">Boolean </font></font></td>
<td width="422"><font face="SimSun"><font style="font-size: 9pt">是否使用自动高度，</font></font><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">true</font></font><font face="SimSun"><font style="font-size: 9pt">则使用自动高度，</font></font><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">false</font></font><font face="SimSun"><font style="font-size: 9pt">则使用固定高度，默认为<font face="TimesNewRomanPSMT"><font style="font-size: 9pt">false </font></font></font></font></td></tr>
<tr height="47">
<td width="97"><font face="TimesNewRomanPS-BoldMT"><font style="font-size: 9pt">autoLoad </font></font></td>
<td width="108"><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">Object/String/ <br />Function </font></font></td>
<td width="422"><font face="SimSun"><font style="font-size: 9pt">设置面板自动加载的</font></font><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">url</font></font><font face="SimSun"><font style="font-size: 9pt">地址。如果不为</font></font><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">null</font></font><font face="SimSun"><font style="font-size: 9pt">则面板会尝试加载该</font></font><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">url</font></font><font face="SimSun"><font style="font-size: 9pt"><br />并立刻在面板中进行渲染。这个连接将变成面板的</font></font><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">body</font></font><font face="SimSun"><font style="font-size: 9pt">元素，所以可以根据需要在任何时候刷新面板内容</font></font></td></tr>
<tr height="23">
<td width="97"><font face="TimesNewRomanPS-BoldMT"><font style="font-size: 9pt">autoScroll </font></font></td>
<td width="108"><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">Boolean </font></font></td>
<td width="422"><font face="SimSun"><font style="font-size: 9pt">设置是否自动显示滚动条，</font></font><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">true</font></font><font face="SimSun"><font style="font-size: 9pt">则设置面板的</font></font><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">body</font></font><font face="SimSun"><font style="font-size: 9pt">元素样式为overflow:'auto'<font face="SimSun"><font style="font-size: 9pt">，内容溢出时会自动显示滚动条，</font></font><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">false</font></font><font face="SimSun"><font style="font-size: 9pt">则不显示滚动条对溢出的内容进行截断。默认为<font face="TimesNewRomanPSMT"><font style="font-size: 9pt">false </font></font></font></font></font></font></td></tr>
<tr height="23">
<td width="97"><font face="TimesNewRomanPS-BoldMT"><font style="font-size: 9pt">autoShow </font></font></td>
<td width="108"><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">Boolean </font></font></td>
<td width="422"><font face="SimSun"><font style="font-size: 9pt">设置是否移除组件的隐藏样式（例如</font></font><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">'x-hidden' or 'x-hide-display'</font></font><font face="SimSun"><font style="font-size: 9pt">），如果为<font face="TimesNewRomanPSMT"><font style="font-size: 9pt">true</font></font><font face="SimSun"><font style="font-size: 9pt">则在渲染时移除它们，默认为</font></font><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">false </font></font></font></font></td></tr>
<tr height="24">
<td width="97"><font face="TimesNewRomanPS-BoldMT"><font style="font-size: 9pt">autoWidth </font></font></td>
<td width="108"><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">Boolean </font></font></td>
<td width="422"><font face="SimSun"><font style="font-size: 9pt">是否使用自动宽度，</font></font><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">true</font></font><font face="SimSun"><font style="font-size: 9pt">为自动宽度，</font></font><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">false</font></font><font face="SimSun"><font style="font-size: 9pt">为固定宽度，默认为</font></font><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">false</font></font></td></tr>
<tr height="24">
<td width="97"><font face="TimesNewRomanPS-BoldMT"><font style="font-size: 9pt">baseCls </font></font></td>
<td width="108"><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">String </font></font></td>
<td width="422"><font face="SimSun"><font style="font-size: 9pt">应用于面板元素的基本样式类，默认为</font></font><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">'x-panel' </font></font></td></tr>
<tr height="23">
<td width="97"><font face="TimesNewRomanPS-BoldMT"><font style="font-size: 9pt">bbar </font></font></td>
<td width="108"><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">Object/Array </font></font></td>
<td width="422"><font face="SimSun"><font style="font-size: 9pt">设置面板的底端工具栏，可以是</font></font><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">Ext.Toolbar</font></font><font face="SimSun"><font style="font-size: 9pt">对象、工具栏配置对象或button<font face="SimSun"><font style="font-size: 9pt">配置对象的数组。</font></font></font></font></td></tr>
<tr height="23">
<td width="97"><font face="TimesNewRomanPS-BoldMT"><font style="font-size: 9pt">bodyBorder </font></font></td>
<td width="108"><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">Boolean </font></font></td>
<td width="422"><font face="SimSun"><font style="font-size: 9pt">设置是否显示面板体（</font></font><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">body</font></font><font face="SimSun"><font style="font-size: 9pt">）的内部边框，</font></font><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">true</font></font><font face="SimSun"><font style="font-size: 9pt">则显示，</font></font><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">false</font></font><font face="SimSun"><font style="font-size: 9pt">则隐藏，默认为<font face="TimesNewRomanPSMT"><font style="font-size: 9pt">true</font></font><font face="SimSun"><font style="font-size: 9pt">。并且该项只在</font></font><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">border = true</font></font><font face="SimSun"><font style="font-size: 9pt">时生效</font></font><font face="TimesNewRomanPSMT"><font style="font-size: 9pt"> </font></font></font></font></td></tr>
<tr height="47">
<td width="97"><font face="TimesNewRomanPS-BoldMT"><font style="font-size: 9pt">bodyStyle </font></font></td>
<td width="108"><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">String/Object/ <br />Function </font></font></td>
<td width="422"><font face="SimSun"><font style="font-size: 9pt">应用于面板体（</font></font><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">body</font></font><font face="SimSun"><font style="font-size: 9pt">）的自定义样式。默认为</font></font><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">null </font></font></td></tr>
<tr height="23">
<td width="97"><font face="TimesNewRomanPS-BoldMT"><font style="font-size: 9pt">border </font></font></td>
<td width="108"><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">Boolean </font></font></td>
<td width="422"><font face="SimSun"><font style="font-size: 9pt">这是是否显示面板体（</font></font><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">body</font></font><font face="SimSun"><font style="font-size: 9pt">）的边框，</font></font><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">true</font></font><font face="SimSun"><font style="font-size: 9pt">则显示，</font></font><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">false</font></font><font face="SimSun"><font style="font-size: 9pt">则隐藏，默认为<font face="TimesNewRomanPSMT"><font style="font-size: 9pt">true</font></font><font face="SimSun"><font style="font-size: 9pt">。默认边框宽度为</font></font><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">2px </font></font></font></font></td></tr>
<tr height="23">
<td width="97"><font face="TimesNewRomanPS-BoldMT"><font style="font-size: 9pt">buttonAlign </font></font></td>
<td width="108"><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">String </font></font></td>
<td width="422"><font face="SimSun"><font style="font-size: 9pt">设置面板底部（</font></font><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">footer</font></font><font face="SimSun"><font style="font-size: 9pt">）中按钮的对齐方式，有效值包括：</font></font><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">'right', 'left' </font></font><font face="SimSun"><font style="font-size: 9pt">和'center'<font face="SimSun"><font style="font-size: 9pt">，默认为</font></font><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">'right'&nbsp;</font></font></font></font><font face="TimesNewRomanPSMT"><font style="font-size: 9pt"> </font></font></td></tr>
<tr height="24">
<td width="97"><font face="TimesNewRomanPS-BoldMT"><font style="font-size: 9pt">buttons </font></font></td>
<td width="108"><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">Array </font></font></td>
<td width="422"><font face="SimSun"><font style="font-size: 9pt">加入到面板底部（</font></font><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">footer</font></font><font face="SimSun"><font style="font-size: 9pt">）中按钮配置对象的数组</font></font><font face="TimesNewRomanPSMT"><font style="font-size: 9pt"> </font></font></td></tr>
<tr height="23">
<td width="97"><font face="TimesNewRomanPS-BoldMT"><font style="font-size: 9pt">collapseFirst </font></font></td>
<td width="108"><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">Boolean </font></font></td>
<td width="422"><font face="SimSun"><font style="font-size: 9pt">设置渲染展开或收缩按钮的顺序。</font></font><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">true</font></font><font face="SimSun"><font style="font-size: 9pt">则在其它按钮渲染前先渲染展开或收缩按钮，<font face="TimesNewRomanPSMT"><font style="font-size: 9pt">false</font></font><font face="SimSun"><font style="font-size: 9pt">则最后渲染，默认为</font></font><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">true</font></font><font face="SimSun"><font style="font-size: 9pt">。该配置项决定了展开或收缩按钮的位置。</font></font></font></font></td></tr>
<tr height="23">
<td width="97"><font face="TimesNewRomanPS-BoldMT"><font style="font-size: 9pt">collapsed </font></font></td>
<td width="108"><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">Boolean </font></font></td>
<td width="422"><font face="SimSun"><font style="font-size: 9pt">设置面板在第一次渲染时是否处于收缩状态，</font></font><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">true</font></font><font face="SimSun"><font style="font-size: 9pt">则收缩，</font></font><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">false</font></font><font face="SimSun"><font style="font-size: 9pt">则展开，默认为<font face="TimesNewRomanPSMT"><font style="font-size: 9pt">false </font></font></font></font></td></tr>
<tr height="23">
<td width="97"><font face="TimesNewRomanPS-BoldMT"><font style="font-size: 9pt">collapsible </font></font></td>
<td width="108"><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">Boolean </font></font></td>
<td width="422"><font face="SimSun"><font style="font-size: 9pt">设置是否允许面板进行展开和收缩，</font></font><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">true</font></font><font face="SimSun"><font style="font-size: 9pt">则允许进行展开和收缩，并在面板头部显示伸缩按钮。默认为<font face="TimesNewRomanPSMT"><font style="font-size: 9pt">false </font></font></font></font></td></tr>
<tr height="24">
<td width="97"><font face="TimesNewRomanPS-BoldMT"><font style="font-size: 9pt">contentEl </font></font></td>
<td width="108"><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">String </font></font></td>
<td width="422"><font face="SimSun"><font style="font-size: 9pt">设置面板的内容元素，可以是页面元素的</font></font><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">id</font></font><font face="SimSun"><font style="font-size: 9pt">或已存在的</font></font><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">HTML</font></font><font face="SimSun"><font style="font-size: 9pt">节点</font></font><font face="TimesNewRomanPSMT"><font style="font-size: 9pt"> </font></font></td></tr>
<tr height="24">
<td width="97"><font face="TimesNewRomanPS-BoldMT"><font style="font-size: 9pt">defaultType </font></font></td>
<td width="108"><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">String </font></font></td>
<td width="422"><font face="SimSun"><font style="font-size: 9pt">面板中元素的默认类型，默认为</font></font><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">'panel' </font></font></td></tr>
<tr height="23">
<td width="97"><font face="TimesNewRomanPS-BoldMT"><font style="font-size: 9pt">defaults </font></font></td>
<td width="108"><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">Object </font></font></td>
<td width="422"><font face="SimSun"><font style="font-size: 9pt">应用到面板容器中所有元素的配置对象， 例如：</font></font><font face="TimesNewRomanPSMT"><font style="font-size: 9pt"> defaults: {bodyStyle:'padding:15px'} </font></font></td></tr>
<tr height="23">
<td width="97"><font face="TimesNewRomanPS-BoldMT"><font style="font-size: 9pt">floating </font></font></td>
<td width="108"><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">Boolean </font></font></td>
<td width="422"><font face="SimSun"><font style="font-size: 9pt">设置面板是否可以浮动，</font></font><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">true</font></font><font face="SimSun"><font style="font-size: 9pt">则允许，默认为</font></font><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">false</font></font><font face="SimSun"><font style="font-size: 9pt">。注意，设置</font></font><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">floating为<font face="TimesNewRomanPSMT"><font style="font-size: 9pt">true</font></font><font face="SimSun"><font style="font-size: 9pt">会导致面板显示在负偏移的位置，从而面板不可见，因为浮动状态下面板是采用绝对定位的，位置必须在渲染之后进行明确的设置（例如<font face="TimesNewRomanPSMT"><font style="font-size: 9pt">myPanel.setPosition(100,100);</font></font><font face="SimSun"><font style="font-size: 9pt">）</font></font><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">.</font></font><font face="SimSun"><font style="font-size: 9pt">，浮动面板也需要有固定的宽度</font></font></font></font></font></font></td></tr>
<tr height="23">
<td width="97"><font face="TimesNewRomanPS-BoldMT"><font style="font-size: 9pt">footer </font></font></td>
<td width="108"><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">Boolean </font></font></td>
<td width="422"><font face="SimSun"><font style="font-size: 9pt">设置是否创建面板底部（</font></font><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">footer</font></font><font face="SimSun"><font style="font-size: 9pt">）元素，</font></font><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">true</font></font><font face="SimSun"><font style="font-size: 9pt">则创建，</font></font><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">false</font></font><font face="SimSun"><font style="font-size: 9pt">则跳过</font></font><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">footer元素的创建，如果一个或多个按钮被加入到<font face="TimesNewRomanPSMT"><font style="font-size: 9pt">footer</font></font><font face="SimSun"><font style="font-size: 9pt">中，则</font></font><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">footer</font></font><font face="SimSun"><font style="font-size: 9pt">的设置会被忽略，而直接创建<font face="TimesNewRomanPSMT"><font style="font-size: 9pt">footer</font></font><font face="SimSun"><font style="font-size: 9pt">元素</font></font><font face="TimesNewRomanPSMT"><font style="font-size: 9pt"> </font></font></font></font></font></font></td></tr></tbody></table></p>
<p align="center">
<table cellspacing="0" cellpadding="0" border="1">
<tbody>
<tr height="21">
<td width="110"><font face="TimesNewRomanPS-BoldMT"><font style="font-size: 9pt">frame </font></font></td>
<td width="97"><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">Boolean </font></font></td>
<td width="419"><font face="SimSun"><font style="font-size: 9pt">设置是否渲染面板，</font></font><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">true</font></font><font face="SimSun"><font style="font-size: 9pt">则渲染面板为自定义的圆角边框，</font></font><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">false</font></font><font face="SimSun"><font style="font-size: 9pt">则渲染为<font face="TimesNewRomanPSMT"><font style="font-size: 9pt">1px</font></font><font face="SimSun"><font style="font-size: 9pt">的直角边框</font></font><font face="TimesNewRomanPSMT"><font style="font-size: 9pt"> </font></font></font></font></td></tr>
<tr height="23">
<td width="110"><font face="TimesNewRomanPS-BoldMT"><font style="font-size: 9pt">header </font></font></td>
<td width="97"><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">Boolean </font></font></td>
<td width="419"><font face="SimSun"><font style="font-size: 9pt">设置是否创建面板头部（</font></font><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">header</font></font><font face="SimSun"><font style="font-size: 9pt">）元素，</font></font><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">true</font></font><font face="SimSun"><font style="font-size: 9pt">则创建，</font></font><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">false</font></font><font face="SimSun"><font style="font-size: 9pt">则跳过</font></font><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">header元素的创建，如果提供了<font face="TimesNewRomanPSMT"><font style="font-size: 9pt">title</font></font><font face="SimSun"><font style="font-size: 9pt">但没有设置</font></font><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">header</font></font><font face="SimSun"><font style="font-size: 9pt">则</font></font><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">header</font></font><font face="SimSun"><font style="font-size: 9pt">会被自动创建。如果提供了<font face="TimesNewRomanPSMT"><font style="font-size: 9pt">title</font></font><font face="SimSun"><font style="font-size: 9pt">但明确设置</font></font><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">header</font></font><font face="SimSun"><font style="font-size: 9pt">为</font></font><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">false</font></font><font face="SimSun"><font style="font-size: 9pt">则</font></font><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">header</font></font><font face="SimSun"><font style="font-size: 9pt">不会被创建</font></font></font></font></font></font></td></tr>
<tr height="24">
<td width="110"><font face="TimesNewRomanPS-BoldMT"><font style="font-size: 9pt">headerAsText </font></font></td>
<td width="97"><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">Boolean </font></font></td>
<td width="419"><font face="SimSun"><font style="font-size: 9pt">设置是否在面板的</font></font><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">header</font></font><font face="SimSun"><font style="font-size: 9pt">中显示</font></font><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">title</font></font><font face="SimSun"><font style="font-size: 9pt">，</font></font><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">true</font></font><font face="SimSun"><font style="font-size: 9pt">则显示，默认为</font></font><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">true </font></font></td></tr>
<tr height="24">
<td width="110"><font face="TimesNewRomanPS-BoldMT"><font style="font-size: 9pt">height </font></font></td>
<td width="97"><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">Number </font></font></td>
<td width="419"><font face="SimSun"><font style="font-size: 9pt">面板高度，默认为</font></font><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">auto </font></font></td></tr>
<tr height="23">
<td width="110"><font face="TimesNewRomanPS-BoldMT"><font style="font-size: 9pt">hideBorders </font></font></td>
<td width="97"><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">Boolean </font></font></td>
<td width="419"><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">true</font></font><font face="SimSun"><font style="font-size: 9pt">则隐藏面板容器中所有组件的边框，</font></font><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">false</font></font><font face="SimSun"><font style="font-size: 9pt">则根据组件的具体配置进行显示</font></font></td></tr>
<tr height="24">
<td width="110"><font face="TimesNewRomanPS-BoldMT"><font style="font-size: 9pt">hideCollapseTool </font></font></td>
<td width="97"><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">Boolean </font></font></td>
<td width="419"><font face="SimSun"><font style="font-size: 9pt">设置当</font></font><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">collapsible</font></font><font face="SimSun"><font style="font-size: 9pt">为</font></font><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">true</font></font><font face="SimSun"><font style="font-size: 9pt">时，是否显示展开或收缩按钮</font></font><font face="TimesNewRomanPSMT"><font style="font-size: 9pt"> </font></font></td></tr>
<tr height="24">
<td width="110"><font face="TimesNewRomanPS-BoldMT"><font style="font-size: 9pt">html </font></font></td>
<td width="97"><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">String/Object </font></font></td>
<td width="419"><font face="SimSun"><font style="font-size: 9pt">设置面板（</font></font><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">body</font></font><font face="SimSun"><font style="font-size: 9pt">）元素的内容为</font></font><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">HTML</font></font><font face="SimSun"><font style="font-size: 9pt">片段或</font></font><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">DomHelper</font></font><font face="SimSun"><font style="font-size: 9pt">生成的内容。</font></font></td></tr>
<tr height="24">
<td width="110"><font face="TimesNewRomanPS-BoldMT"><font style="font-size: 9pt">items </font></font></td>
<td width="97"><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">Mixed </font></font></td>
<td width="419"><font face="SimSun"><font style="font-size: 9pt">单独一个子组件或子组件的数组</font></font><font face="TimesNewRomanPSMT"><font style="font-size: 9pt"> </font></font></td></tr>
<tr height="23">
<td width="110"><font face="TimesNewRomanPS-BoldMT"><font style="font-size: 9pt">layout </font></font></td>
<td width="97"><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">String </font></font></td>
<td width="419"><font face="SimSun"><font style="font-size: 9pt">面板的布局类型，默认</font></font><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">Ext.layout.ContainerLayout</font></font><font face="SimSun"><font style="font-size: 9pt">布局，被选布局的配置项通过<font face="TimesNewRomanPSMT"><font style="font-size: 9pt">layoutConfig</font></font><font face="SimSun"><font style="font-size: 9pt">进行设置</font></font></font></font></td></tr>
<tr height="23">
<td width="110"><font face="TimesNewRomanPS-BoldMT"><font style="font-size: 9pt">layoutConfig </font></font></td>
<td width="97"><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">Object </font></font></td>
<td width="419"><font face="SimSun"><font style="font-size: 9pt">这个配置对象包含被选布局的配置项，针对每种布局的配置项需要查看相应的布局类说明<font face="TimesNewRomanPSMT"><font style="font-size: 9pt"> </font></font></font></font></td></tr>
<tr height="24">
<td width="110"><font face="TimesNewRomanPS-BoldMT"><font style="font-size: 9pt">maskDisabled </font></font></td>
<td width="97"><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">Boolean </font></font></td>
<td width="419"><font face="SimSun"><font style="font-size: 9pt">设置当面板不能使用时是否遮罩面板，</font></font><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">true</font></font><font face="SimSun"><font style="font-size: 9pt">则遮罩，默认为</font></font><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">true </font></font></td></tr>
<tr height="23">
<td width="110"><font face="TimesNewRomanPS-BoldMT"><font style="font-size: 9pt">shadow </font></font></td>
<td width="97"><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">Boolean/String </font></font></td>
<td width="419"><font face="SimSun"><font style="font-size: 9pt">设置是否在面板后面显示阴影，</font></font><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">true</font></font><font face="SimSun"><font style="font-size: 9pt">则显示，或通过字符串指定阴影的显示模式，有效值包括：<font face="TimesNewRomanPSMT"><font style="font-size: 9pt">sides</font></font><font face="SimSun"><font style="font-size: 9pt">、</font></font><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">frame</font></font><font face="SimSun"><font style="font-size: 9pt">、</font></font><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">drop</font></font><font face="SimSun"><font style="font-size: 9pt">，默认为</font></font><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">'sides'</font></font><font face="SimSun"><font style="font-size: 9pt">。该项只在floating <font face="SimSun"><font style="font-size: 9pt">为</font></font><font face="TimesNewRomanPSMT"><font style="font-size: 9pt"> true</font></font><font face="SimSun"><font style="font-size: 9pt">时生效</font></font></font></font></font></font></td></tr>
<tr height="23">
<td width="110"><font face="TimesNewRomanPS-BoldMT"><font style="font-size: 9pt">shadowOffset </font></font></td>
<td width="97"><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">Number </font></font></td>
<td width="419"><font face="SimSun"><font style="font-size: 9pt">设置面板阴影的偏移量，以像素为单位，默认为</font></font><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">4</font></font><font face="SimSun"><font style="font-size: 9pt">。该项只在</font></font><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">floating </font></font><font face="SimSun"><font style="font-size: 9pt">为</font></font><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">true<font face="SimSun"><font style="font-size: 9pt">时生效</font></font></font></font></td></tr>
<tr height="23">
<td width="110"><font face="TimesNewRomanPS-BoldMT"><font style="font-size: 9pt">tbar </font></font></td>
<td width="97"><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">Object/Array </font></font></td>
<td width="419"><font face="SimSun"><font style="font-size: 9pt">设置面板的顶端工具栏，可以是</font></font><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">Ext.Toolbar</font></font><font face="SimSun"><font style="font-size: 9pt">对象、工具栏配置对象或button<font face="SimSun"><font style="font-size: 9pt">配置对象的数组。注意，面板渲染后只能通过</font></font><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">getTopToolbar</font></font><font face="SimSun"><font style="font-size: 9pt">方法访问该工具栏</font></font></font></font></td></tr>
<tr height="24">
<td width="110"><font face="TimesNewRomanPS-BoldMT"><font style="font-size: 9pt">title </font></font></td>
<td width="97"><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">String </font></font></td>
<td width="419"><font face="SimSun"><font style="font-size: 9pt">显示在面板头部的标题信息</font></font><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">' </font></font></td></tr>
<tr height="23">
<td width="110"><font face="TimesNewRomanPS-BoldMT"><font style="font-size: 9pt">titleCollapse </font></font></td>
<td width="97"><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">Boolean </font></font></td>
<td width="419"><font face="SimSun"><font style="font-size: 9pt">设置是否允许通过点击面板头部进行展开和收缩操作，</font></font><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">true</font></font><font face="SimSun"><font style="font-size: 9pt">则允许，默认为<font face="TimesNewRomanPSMT"><font style="font-size: 9pt">false </font></font></font></font></td></tr>
<tr height="23">
<td width="110"><font face="TimesNewRomanPS-BoldMT"><font style="font-size: 9pt">tools </font></font></td>
<td width="97"><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">Array </font></font></td>
<td width="419"><font face="SimSun"><font style="font-size: 9pt">工具按钮配置对象的数组，这些按钮会被添加到面板头部功能区，在表<font face="TimesNewRomanPSMT"><font style="font-size: 9pt">5-2</font></font><font face="SimSun"><font style="font-size: 9pt">中会有详细的说明</font></font></font></font></td></tr>
<tr height="20">
<td width="110"><font face="TimesNewRomanPS-BoldMT"><font style="font-size: 9pt">width </font></font></td>
<td width="97"><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">Number </font></font></td>
<td width="419"><font face="SimSun"><font style="font-size: 9pt">面板宽度，默认为</font></font><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">auto </font></font></td></tr></tbody></table></p>
<p align="left">&nbsp;&nbsp;&nbsp; Tools 配置项主要用来设置面板头部功能区所要显示的各类按钮，每个按钮的配置对象可能包含的配置项在表5-2中说明，tools配置项id与按钮图标对应关系如表5-3所示。</p>
<p align="center">表5-2&nbsp; tools配置项明细表</p>
<p align="center">
<table cellspacing="0" cellpadding="0" border="1">
<tbody>
<tr height="21">
<td width="85"><font face="SimSun"><font style="font-size: 9pt">配置项</font></font><font face="TimesNewRomanPS-BoldMT"><font style="font-size: 9pt"> </font></font></td>
<td width="132"><font face="SimSun"><font style="font-size: 9pt">参数类型</font></font><font face="TimesNewRomanPS-BoldMT"><font style="font-size: 9pt"> </font></font></td>
<td width="377"><font face="SimSun"><font style="font-size: 9pt">说明</font></font><font face="TimesNewRomanPS-BoldMT"><font style="font-size: 9pt"> </font></font></td></tr>
<tr height="24">
<td width="85"><font face="TimesNewRomanPS-BoldMT"><font style="font-size: 9pt">id </font></font></td>
<td width="132"><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">String </font></font></td>
<td width="377"><font face="SimSun"><font style="font-size: 9pt">必选项，可能值及效果见表</font></font><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">5.3 </font></font></td></tr>
<tr height="23">
<td width="85"><font face="TimesNewRomanPS-BoldMT"><font style="font-size: 9pt">handler </font></font></td>
<td width="132"><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">Function </font></font></td>
<td width="377"><font face="SimSun"><font style="font-size: 9pt">点击按钮后触发的处理函数，参数包括：</font></font><font face="TimesNewRomanPSMT"><font style="font-size: 9pt"> event : Ext.EventObject<font face="SimSun"><font style="font-size: 9pt">、</font></font><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">toolEl : Ext.Element</font></font><font face="SimSun"><font style="font-size: 9pt">、</font></font><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">Panel : Ext.Panel </font></font></font></font></td></tr>
<tr height="24">
<td width="85"><font face="TimesNewRomanPS-BoldMT"><font style="font-size: 9pt">scope </font></font></td>
<td width="132"><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">Object </font></font></td>
<td width="377"><font face="SimSun"><font style="font-size: 9pt">处理函数的执行范围</font></font><font face="TimesNewRomanPSMT"><font style="font-size: 9pt"> </font></font></td></tr>
<tr height="24">
<td width="85"><font face="TimesNewRomanPS-BoldMT"><font style="font-size: 9pt">qtip </font></font></td>
<td width="132"><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">String/Object </font></font></td>
<td width="377"><font face="SimSun"><font style="font-size: 9pt">为按钮指定提示信息，可以是字符串或配置对象</font></font><font face="TimesNewRomanPSMT"><font style="font-size: 9pt"> </font></font></td></tr>
<tr height="24">
<td width="85"><font face="TimesNewRomanPS-BoldMT"><font style="font-size: 9pt">hidden </font></font></td>
<td width="132"><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">Boolean </font></font></td>
<td width="377"><font face="SimSun"><font style="font-size: 9pt">设置初次渲染时，是否隐藏</font></font><font face="TimesNewRomanPSMT"><font style="font-size: 9pt"> </font></font></td></tr>
<tr height="20">
<td width="85"><font face="TimesNewRomanPS-BoldMT"><font style="font-size: 9pt">on </font></font></td>
<td width="132"><font face="TimesNewRomanPSMT"><font style="font-size: 9pt">Object </font></font></td>
<td width="377"><font face="SimSun"><font style="font-size: 9pt">为按钮配置事件监听器。</font></font><font face="TimesNewRomanPSMT"><font style="font-size: 9pt"> </font></font></td></tr></tbody></table></p>
<p align="left">表5-3&nbsp; tools配置项id与按钮图标对应关系表 <br /><img alt="Ext.Panel面板 - ht_19820316 - ht_19820316的博客" src="http://www.myext.cn/Article/UploadFiles/200906/2009061023155413.jpg" __1346683593140__="ev_6345203436" /><br /><br /><strong>三、使用Ext.Panel</strong> <br /><br />&nbsp;&nbsp;&nbsp; 本节主要介绍常用的面板使用方法，并结合示例介绍5.1.2节中常用配置项的使用及效果，以使读者有一个形象的认识。对于面板最重要的功能和作用就是在其中显示各种不同来源的内容，分为4个示例分别讲解4种不同的方式为面板提供显示内容，它们分别是：&nbsp;<br />&nbsp; &nbsp; 使用autoLoad配置项为面板加载远程页面。&nbsp;<br />&nbsp; &nbsp; 使用contentEl配置项为面板加载本地资源。&nbsp;<br />&nbsp;&nbsp; &nbsp;使用html配置项自定义面板内容。&nbsp;<br />&nbsp; &nbsp; 使用items配置项在面板中添加组件。 <br />&nbsp;&nbsp;&nbsp; 这4种方式可以灵活的为面板提供各种需要显示的内容，掌握它们是掌握面板使用方式的基础，在接下来的示例中会逐一看到它们的用法和效果。 <br /><br /><strong>1.&nbsp; 使用autoLoad配置项为面板加载远程页面<br /></strong><br />&nbsp;&nbsp;&nbsp; 在本例中创建一个面板用于加载远程页面，示例中主要使用了 autoLoad 配置项设置要加载的远程页面url地址，同时展示了面板折叠和滚动条的效果，请看下面的示例代码。 <br />&nbsp;&nbsp;&nbsp; 代码5-2：使用autoLoad配置项加载远程页面示例 <br />&nbsp; &lt;script type="text/javas<wbr>cript"&gt; <br />&nbsp;Ext.on<wbr>Ready(function(){ <br />&nbsp; Ext.BLANK_IMAGE_URL ='../../extjs2.0/resources/images/default/s.gif'; <br />&nbsp; var panel = new Ext.Panel({ <br />&nbsp;&nbsp; title:'面板加载远程页面', <br />&nbsp;&nbsp; height:150,//设置面板的高度 <br />&nbsp;&nbsp; width:250,//设置面板的宽度 <br />&nbsp;&nbsp; frame:true,//渲染面板 <br />&nbsp;&nbsp; autoScroll :true,//自动显示滚动条 <br />&nbsp;&nbsp; collapsible : true,//允许展开和收缩 <br />&nbsp;&nbsp; applyTo :'panel', <br />&nbsp;&nbsp; autoLoad :'page1.html',//自动加载面板体的默认连接 <br />&nbsp;&nbsp; bodyStyle:'background-color:#FFFFFF'//设置面板体的背景色 <br />&nbsp; })<br />&nbsp;}); <br />&nbsp; &lt;/script&gt; <br />&nbsp; &lt;div id='panel'&gt; <br />&nbsp;&nbsp;&nbsp; 代码 5-2 演示了设置面板的 autoLoad 配置项加载指定页面的方式，从下面的截图中可以看到，当面板初始化时自动加载了指定的page1.html页面，并且在页面内容超出面板大小时自动显示滚动条。效果如图5-2~5-4所示。<br /><img alt="Ext.Panel面板 - ht_19820316 - ht_19820316的博客" src="http://www.myext.cn/Article/UploadFiles/200906/2009061023223348.jpg" __1346683593140__="ev_1656840181" /><br /></p>
<p align="left"><strong>2.&nbsp; 使用contentEl配置项为面板加载本地资源</strong> <br /><br />&nbsp;&nbsp;&nbsp; 上例介绍了面板加载远程页面的方法，它是非常实用的方式，但是在有些情况下并不需要读取一份远程的页面，而只是将本页面中的已有部分展示在面板中，这就用到了contentEl配置项，它的作用就是指定在面板中所要显示的本地资源id，看下面的示例代码。 <br />&nbsp;&nbsp;&nbsp; 代码5-3：使用contentEl配置项加载本地资源示例 <br />&nbsp; &lt;script type="text/javas<wbr>cript"&gt; <br />&nbsp;Ext.on<wbr>Ready(function(){ <br />&nbsp; Ext.BLANK_IMAGE_URL ='../../extjs2.0/resources/images/default/s.gif'; <br />&nbsp; var panel = new Ext.Panel({ <br />&nbsp;&nbsp; title:'面板加载本地资源', <br />&nbsp;&nbsp; height:150,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //设置面板的高度 <br />&nbsp;&nbsp; width:250,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //设置面板的宽度 <br />&nbsp;&nbsp; frame:true,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //渲染面板 <br />&nbsp;&nbsp; collapsible : true,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //允许展开和收缩 <br />&nbsp;&nbsp; autoScroll : true,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //自动显示滚动条 <br />&nbsp;&nbsp; autoHeight&nbsp; : false,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //使用固定高度 <br />&nbsp;&nbsp; //autoHeight&nbsp; : true,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //使用自动高度 <br />&nbsp;&nbsp; applyTo :'panel', <br />&nbsp;&nbsp; contentEl :'localElement',&nbsp;&nbsp;&nbsp; //加载本地资源 <br />&nbsp;&nbsp; bodyStyle:'background-color:#FFFFFF'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //设置面板体的背景色 <br />&nbsp; }) <br />&nbsp;}); <br />&nbsp; &lt;/script&gt; <br />&nbsp; &lt;table border=1 id='localElement'&gt; <br />&nbsp; &lt;tr&gt;&lt;th colspan=2&gt;本地资源---员工列表&lt;/th&gt;&lt;/tr&gt; <br />&nbsp; &lt;tr&gt; <br />&nbsp;&nbsp; &lt;th width = 60&gt;序号&lt;/th&gt;&lt;th width = 80&gt;姓名&lt;/th&gt; <br />&nbsp; &lt;tr&gt; <br />&nbsp; &lt;tr&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;张三&lt;/td&gt;&lt;/tr&gt; <br />&nbsp; &lt;tr&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;李四&lt;/td&gt;&lt;/tr&gt; <br />&nbsp; &lt;tr&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;王五&lt;/td&gt;&lt;/tr&gt; <br />&nbsp; &lt;tr&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;赵六&lt;/td&gt;&lt;/tr&gt; <br />&nbsp; &lt;tr&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;陈七&lt;/td&gt;&lt;/tr&gt; <br />&nbsp; &lt;tr&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;杨八&lt;/td&gt;&lt;/tr&gt; <br />&nbsp; &lt;tr&gt;&lt;td&gt;7&lt;/td&gt;&lt;td&gt;刘九&lt;/td&gt;&lt;/tr&gt; <br />&nbsp; &lt;/table&gt;</p>
<p align="left">&nbsp;&nbsp;&nbsp; 在代码5-3中可以看到员工列表并没有通过请求远程页面得到，而是直接将本页面中已存在的一份table 表格作为内容展示在了面板当中，这种方式省略了远程页面的读取过程，显示速度快，适合于展示简单的本地资源。同时在示例中还展示了自动高度与固定高度的不同效果，自动高度会根据展示内容的实际高度自动调整面板高度，所以在面板内部并没有出现滚动条。运行效果如图5-5和5-6所示。<br /><img alt="Ext.Panel面板 - ht_19820316 - ht_19820316的博客" src="http://www.myext.cn/Article/UploadFiles/200906/2009061023260014.jpg" __1346683593140__="ev_3659373071" /><br /></p>
<p align="left"><strong>3.&nbsp; 使用html配置项自定义面板内容</strong><br /><br />&nbsp;&nbsp;&nbsp; 在上面2个示例中，不管是远程页面还是本地资源加载的都是已存在的页面内容。接下来介绍自定义面板内容的实现方式，可以自己编写HTML代码来定义自己需要的展示效果，示例使用面板的html配置项，通过它就可以实现自定义面板内容的目的，看下面的示例。 <br />&nbsp;&nbsp;&nbsp; 代码5-4：使用html配置项自定义面板内容示例 <br />&lt;script type="text/javas<wbr>cript"&gt; <br />Ext.on<wbr>Ready(function(){ <br />&nbsp; Ext.BLANK_IMAGE_URL ='../../extjs2.0/resources/images/default/s.gif'; <br />&nbsp; var htmlArray = [ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '&lt;table border=1&gt;', <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '&lt;tr&gt;&lt;td colspan=2&gt;员工列表&lt;/td&gt;&lt;/tr&gt;', <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '&lt;tr&gt;&lt;th width = 60&gt;序号&lt;/th&gt;&lt;th width = 80&gt;姓名&lt;/th&gt;&lt;tr&gt;', <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '&lt;tr&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;张三&lt;/td&gt;&lt;/tr&gt;', <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '&lt;tr&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;李四&lt;/td&gt;&lt;/tr&gt;', <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '&lt;tr&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;王五&lt;/td&gt;&lt;/tr&gt;', <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '&lt;tr&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;赵六&lt;/td&gt;&lt;/tr&gt;', <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '&lt;tr&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;陈七&lt;/td&gt;&lt;/tr&gt;', <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '&lt;tr&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;杨八&lt;/td&gt;&lt;/tr&gt;', <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '&lt;tr&gt;&lt;td&gt;7&lt;/td&gt;&lt;td&gt;刘九&lt;/td&gt;&lt;/tr&gt;', <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '&lt;/table&gt;' <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ]; <br />&nbsp; var panel = new Ext.Panel({ <br />&nbsp;&nbsp; title:'使用html配置项自定义面板内容', <br />&nbsp;&nbsp; height:150,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //设置面板的高度 <br />&nbsp;&nbsp; width:250,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //设置面板的宽度 <br />&nbsp;&nbsp; frame:true,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //渲染面板 <br />&nbsp;&nbsp; collapsible : true,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //允许展开和收缩 <br />&nbsp;&nbsp; autoScroll : true,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //自动显示滚动条 <br />&nbsp;&nbsp; applyTo :'panel', <br />&nbsp;&nbsp; html: htmlArray.join(''), <br />&nbsp;&nbsp; bodyStyle:'background-color:#FFFFFF'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //设置面板体的背景色 <br />&nbsp; }) <br />&nbsp;}); <br />&lt;/script&gt; <br />&nbsp;&nbsp;&nbsp; 图5-7与图5-5中展示的页面效果完全相同，但是它们却使用了完全不同的产生方式，html 配置项给了我们动态组织面板内容的途径，在代码 5-7 中首先创建了字符串数组htmlArray，然后通过调用数组的 join 方法将数组内容连接为整体供程序使用，读者也可以使用&#8220;+&#8221;进行字符串连接，这两种连接方式对程序的执行并没有任何影响。<br /><img alt="Ext.Panel面板 - ht_19820316 - ht_19820316的博客" src="http://www.myext.cn/Article/UploadFiles/200906/2009061023284159.jpg" __1346683593140__="ev_7183184680" /><br /><strong><br />4.&nbsp; 使用items配置项在面板中添加组件<br /><br /></strong>&nbsp;&nbsp;&nbsp; 在学习完前面3种为面板添加内容的方式之后，再介绍通过items配置项为面板添加组件的方式，这也是最重要和常用的面板功能之一。通过使用items配置项不但可以向面板中添加组件，还可以实现面板的多层嵌套，由于items既可以接受单个对象也可以接受数组为参数，所以将分2个示例分别讲解。&nbsp;<br />&nbsp; &nbsp; <strong>向面板中添加单一组件</strong> <br />&nbsp;&nbsp;&nbsp; 在代码5-5中将创建一个只包含日期选择组件的面板。 <br />代码5-5：使用items配置项添加单一组件示例 <br />&nbsp; &lt;script type="text/javas<wbr>cript"&gt; <br />&nbsp;Ext.on<wbr>Ready(function(){ <br />&nbsp; Ext.BLANK_IMAGE_URL ='../../extjs2.0/resources/images/default/s.gif'; <br />&nbsp; var panel = new Ext.Panel({ <br />&nbsp;&nbsp; header :true, <br />&nbsp;&nbsp; title:'日历', <br />&nbsp;&nbsp; frame:true,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //渲染面板 <br />&nbsp;&nbsp; collapsible : true,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //允许展开和收缩 <br />&nbsp;&nbsp; autoHeight : true,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //自动高度 <br />&nbsp;&nbsp; width : 189,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //固定宽度 <br />&nbsp;&nbsp; applyTo :'panel', <br />&nbsp;&nbsp; items: new Ext.DatePicker()&nbsp;&nbsp;&nbsp; //向面板中添加一个日期组件 <br />&nbsp; }) <br />&nbsp;}); <br />&nbsp; &lt;/script&gt; <br />&nbsp;&nbsp;&nbsp; 代码5-5演示了向面板添加单一组件的方法，其中items配置项是向面板中添加组件的主要方式，在代码5-6中会演示向面板中添加多个组件的方法。运行效果如图5-8所示。</p>
<p align="left"><img style="display: block; text-align: center" alt="Ext.Panel面板 - ht_19820316 - ht_19820316的博客" src="http://www.myext.cn/Article/UploadFiles/200906/2009061023321084.jpg" __1346683593140__="ev_4900790226" /></p>
<p align="left">图5-8&nbsp; 通过items配置项向面板中添加一个组件<br /><br /><strong>向面板中添加多个组件</strong> <br />&nbsp;&nbsp;&nbsp; 可以向面板中添加普通组件，也可以向面板中添加子面板，因为面板（Ext.Panel）本身也是组件，因此面板本身可以通过items配置项添加到父面板中，这样就形成了多层面板嵌套的效果，这也是进行复杂页面布局的基础。下面是向面板添加多个组件的简单示例。 <br />&nbsp;&nbsp;&nbsp; 代码5-6：使用items配置项添加多个组件示例 <br />&nbsp; &lt;script type="text/javas<wbr>cript"&gt; <br />&nbsp;Ext.on<wbr>Ready(function(){ <br />&nbsp; Ext.BLANK_IMAGE_URL ='../../extjs2.0/resources/images/default/s.gif'; <br />&nbsp; var panel = new Ext.Panel({ <br />&nbsp;&nbsp; header :true, <br />&nbsp;&nbsp; title:'使用items进行面板嵌套', <br />&nbsp;&nbsp; frame:true,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //渲染面板 <br />&nbsp;&nbsp; collapsible : true,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //允许展开和收缩 <br />&nbsp;&nbsp; height : 200, <br />&nbsp;&nbsp; width : 250, <br />&nbsp;&nbsp; applyTo :'panel', <br />&nbsp;&nbsp; defaults : {&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //设置默认属性 <br />&nbsp;&nbsp;&nbsp; bodyStyle:'background-color:#FFFFFF',&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //设置面板体的背景色 <br />&nbsp;&nbsp;&nbsp; height : 80,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //子面板高度为80 <br />&nbsp;&nbsp;&nbsp; collapsible : true,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //允许展开和收缩 <br />&nbsp;&nbsp;&nbsp; autoScroll : true&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //自动显示滚动条 <br />&nbsp;&nbsp; }, <br />&nbsp;&nbsp; items: [ <br />&nbsp;&nbsp;&nbsp; new Ext.Panel({ <br />&nbsp;&nbsp;&nbsp;&nbsp; title : '嵌套面板一', <br />&nbsp;&nbsp;&nbsp;&nbsp; contentEl : 'localElement'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //加载本地资源 <br />&nbsp;&nbsp;&nbsp; }), <br />&nbsp;&nbsp;&nbsp; new Ext.Panel({ <br />&nbsp;&nbsp;&nbsp;&nbsp; title : '嵌套面板二', <br />&nbsp;&nbsp;&nbsp;&nbsp; autoLoad : 'page1.html'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //加载远程页面 <br />&nbsp;&nbsp;&nbsp; }) <br />&nbsp;&nbsp; ] <br />&nbsp; }) <br />&nbsp;}); <br />&nbsp; &lt;/script&gt; <br />&nbsp;&lt;table border=1 id='localElement'&gt; <br />&nbsp; &lt;tr&gt;&lt;th colspan=2&gt;本地资源---员工列表&lt;/th&gt;&lt;/tr&gt; <br />&nbsp; &lt;tr&gt; <br />&nbsp;&nbsp; &lt;th width = 60&gt;序号&lt;/th&gt;&lt;th width = 80&gt;姓名&lt;/th&gt; <br />&nbsp; &lt;tr&gt; <br />&nbsp; &lt;tr&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;张三&lt;/td&gt;&lt;/tr&gt; <br />&nbsp; &lt;tr&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;李四&lt;/td&gt;&lt;/tr&gt; <br />&nbsp; &lt;tr&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;王五&lt;/td&gt;&lt;/tr&gt; <br />&nbsp;&lt;/table&gt; <br />&nbsp;&nbsp;&nbsp; 代码 5-6 演示了向面板中添加多个组件的方法，items 配置项接受组件数组为参数依次<br />将组件添加到面板当中。效果如图5-9和5-10所示。<br /><img alt="Ext.Panel面板 - ht_19820316 - ht_19820316的博客" src="http://www.myext.cn/Article/UploadFiles/200906/2009061023344500.jpg" __1346683593140__="ev_8788773986" /><br /></p></blockquote></div><img src ="http://www.blogjava.net/liuyz2006/aggbug/386913.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/liuyz2006/" target="_blank">阿者</a> 2012-09-03 23:15 <a href="http://www.blogjava.net/liuyz2006/articles/386913.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>javascript prototype分析</title><link>http://www.blogjava.net/liuyz2006/articles/385789.html</link><dc:creator>阿者</dc:creator><author>阿者</author><pubDate>Sun, 19 Aug 2012 15:04:00 GMT</pubDate><guid>http://www.blogjava.net/liuyz2006/articles/385789.html</guid><wfw:comment>http://www.blogjava.net/liuyz2006/comments/385789.html</wfw:comment><comments>http://www.blogjava.net/liuyz2006/articles/385789.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/liuyz2006/comments/commentRss/385789.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/liuyz2006/services/trackbacks/385789.html</trackback:ping><description><![CDATA[<div class="content-head clearfix">
<h2 class="title content-title">javascript prototype分析</h2></div>
<div class="content text-content clearfix" id="content" sizcache09011670860317718="0" sizset="1">对于Javascript的初学者来说，Prototype是个蛮高深的话题，其实并不尽然。 
<p>　　我说不尽然，意思是说理解Prototype的一般用法很简单。但是真正能做到融会贯通理解Prototype确实是件很难的事情。</p>
<p>　　今天我就从Prototype的基本开始讲。上文中我讲了原型模式。其实在Javascript中原型也是这个意思。 Javascript中对象的原型属性的解释是：返回对象类型原型的引用。这是一个晕人的解释。其实就是指定了一个需要复制的对象。</p>
<p>　　文字再多也不如代码，上代码，说最简单的，任何类都继承自Object类：</p>
<p>function A()<br />{</p>
<p>//todo something</p>
<p>}<br />A.prototype=new Object();</p>
<p>　　其实这样就相当于Object对象是A的一个原型，这样就相当于了把Object对象的属性和方法复制到了A上，和原型模式的精髓一样吧！</p>
<p>　　好，大概了解了prototype的基本用法，我们来看看原型究竟有什么用处。</p>
<p>　　最简单的用法，动态扩展类的方法和属性。</p>
<p>de&gt;function People()<br />{<br />　　　this.Jump=function(){<br />　　　　　　&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert("I can jump");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />}</p>
<p>　　现在要扩充方法：</p>
<p>People.prototype.Run=function(){<br />　　　　　　　　&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert("I can run,too");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>　　好，测试下：</p>
<p>var p=new People();<br />p.Jump();<br />p.Run();</p>
<p sizcache09011670860317718="0" sizset="1"><img title="Javas<wbr  alt="" />cript玩转Prototype - Gabriel - Software Engineer" height=153 alt="Javas<wbr>cript玩转Prototype(二)" src="http://hiphotos.baidu.com/yafengyouxia/pic/item/9f99f91faaa8f027f724e4a1.jpg" width=231></p>
<p sizcache09011670860317718="0" sizset="2"><img title="Javas<wbr  alt="" />cript玩转Prototype - Gabriel - Software Engineer" height=138 alt="Javas<wbr>cript玩转Prototype(二)" src="http://hiphotos.baidu.com/yafengyouxia/pic/item/2bd66063e085f0240d33faa1.jpg" width=217></p>
<p>　　接下来，顺带讲一下Javascript的方法种类。我个人将Javascript的方法分为三种：</p>
<p>　　&lt;1&gt;类方法</p>
<p>　　&lt;2&gt;对象方法</p>
<p>　　&lt;3&gt;原型方法</p>
<p>　　先看代码，后讲区别：</p>
<p>function People(name)<br />{<br />this.name=name;<br />//对象方法<br />this.Introduce=function(){<br />alert("My name is "+this.name);<br />}<br />}<br />//类方法<br />People.Run=function(){<br />alert("I can run");<br />}<br />//原型方法<br />People.prototype.IntroduceChinese=function(){<br />alert(" 我的名字是"+this.name);<br />}</p>
<p>　　测试下：</p>
<p>var p1=new People("Windking");<br />p1.Introduce();<br />People.Run();<br />p1.IntroduceChinese();</p>
<p sizcache09011670860317718="0" sizset="3"><img title="Javas<wbr  alt="" />cript玩转Prototype - Gabriel - Software Engineer" height=124 alt="Javas<wbr>cript玩转Prototype(二)" src="http://hiphotos.baidu.com/yafengyouxia/pic/item/63fb606014921c00eaf8f8a1.jpg" width=203></p>
<p sizcache09011670860317718="0" sizset="4"><img title="Javas<wbr  alt="" />cript玩转Prototype - Gabriel - Software Engineer" height=140 alt="Javas<wbr>cript玩转Prototype(二)" src="http://hiphotos.baidu.com/yafengyouxia/pic/item/99ec8c44f1598108500ffea1.jpg" width=209></p>
<p sizcache09011670860317718="0" sizset="5"><img title="Javas<wbr  alt="" />cript玩转Prototype - Gabriel - Software Engineer" height=136 alt="Javas<wbr>cript玩转Prototype(二)" src="http://hiphotos.baidu.com/yafengyouxia/pic/item/7e27114c4dae42bdd62afca1.jpg" width=216></p>
<p>　　总结下：</p><col /><col /><col />
<p>　　名称</p>
<p>　　位置</p>
<p>　　格式</p>
<p>　　类方法</p>
<p>　　类外</p>
<p>　　类名.方法名</p>
<p>　　对象方法</p>
<p>　　类内</p>
<p>　　this.方法名</p>
<p>　　原型方法</p>
<p>　　类外</p>
<p>　　类名.prototype.方法名</p>
<p>　　我们用C#来做类别来讲解这三个方法：</p>
<p>　　类方法其实就是我们讲的静态方法：</p>
<p>　　　　　　　如public static void Run(){}</p>
<p>　　而对象方法其实就是实例方法。</p>
<p>　　　　　　　　public void Introduce(){}</p>
<p>　　而原型方法有所不同，由于C#中不允许动态为对象增加方法，因此在C#中并不存在原型方法。原型方法处于C#的静态方法与实例方法之间，通过对象调用，但是存储的内存形式却类似于静态方法，也就是所有实例对象共享同一副本。</p>
<p>　　(ps:尽量将方法定义为原型方法，原型方法避免了每次调用构造函数时对属性或方法的构造，因此比较节省空间和时间)</p>
<p>　　p1.IntroduceChinese();创建对象。</p>
<p>　　还记得我在上一篇文章里讲的浅复制么？为什么大家都喜欢批量生产？效率是最主要因素。浅复制也一样，我们为什么要浅复制，因为效率高。作为原型模式的 Javascript应用，prototype也承担着这样的重任。用prototype来创建对象，要比其他方式快得多。</p>
<p>　　看代码例子：</p>
<p>function People(name,age)<br />{<br />　　　　　　　　this.name=name;<br />　　　　　　　　this.age=age;<br />}<br />var p1=new People("Xuan",22);<br />var girls=[ ];<br />var GirlPrototype=function(){};<br />GirlPrototype.prototype=p1;<br />for(var i=0;i&lt;100000;i++)<br />{<br />　　　　　　　　girls[i]=new GirlPrototype();<br />}</p>
<p>　　玩转继承：</p>
<p>　　Prototype最大的应用其实还是在于玩转继承，这个在此不讨论，请参加我的另一篇文章：《Javascript玩转继承（二）》。</p>
<p>　　好，基本的应用说完，下面我来说一下prototype的天使和魔鬼两面。</p>
<p>　　说prototype是天使，是因为以上的几点应用，让Javascript增加了很大的灵活性，尤其原型继承，更是Javascript最多的继承方式。</p>
<p>　　说他是魔鬼，则是因为下面几方面：</p>
<p>　　原型继承的缺陷。请参见《Javascript玩转继承（二）》。</p>
<p>　　原型其实相当于原型模式中的浅复制，因此也会造成牵一发而动全身的效果。</p>　　过于灵活。为什么过于灵活呢？其实这点是针对第一点来说的，能够动态地添加属性和方法固然是增加了灵活性。可是我们讨论一种情况，100个人同时来开发一个Javascript的项目，很多没经验的人爱上了玩转prototype，一个人往这个类里加一个方法，还面向对象么？ </div><img src ="http://www.blogjava.net/liuyz2006/aggbug/385789.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/liuyz2006/" target="_blank">阿者</a> 2012-08-19 23:04 <a href="http://www.blogjava.net/liuyz2006/articles/385789.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JavaScript prototype整理（网上的三种理解） </title><link>http://www.blogjava.net/liuyz2006/articles/385784.html</link><dc:creator>阿者</dc:creator><author>阿者</author><pubDate>Sun, 19 Aug 2012 13:09:00 GMT</pubDate><guid>http://www.blogjava.net/liuyz2006/articles/385784.html</guid><wfw:comment>http://www.blogjava.net/liuyz2006/comments/385784.html</wfw:comment><comments>http://www.blogjava.net/liuyz2006/articles/385784.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/liuyz2006/comments/commentRss/385784.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/liuyz2006/services/trackbacks/385784.html</trackback:ping><description><![CDATA[<div class="blog_title">
<h3><a href="http://yangsp1.iteye.com/blog/499264">JavaScript prototype整理（网上的三种理解）</a> <em class="actions"></em></h3>
<div class="news_tag"><a href="http://www.iteye.com/blogs/tag/prototype">prototype</a><a href="http://www.iteye.com/blogs/tag/JavaScript">JavaScript</a><a href="http://www.iteye.com/blogs/tag/IE">IE</a><a href="http://www.iteye.com/blogs/tag/IDEA">IDEA</a><a href="http://www.iteye.com/blogs/tag/HTML">HTML</a>&nbsp;</div></div>
<div class="blog_content" id="blog_content">prototype属性，只有function对象中才具有的显式属性； <br /><br />网上三种理解： <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1：通过构造函数创建的普通对象，通过其constructor属性引用它的构造函数对象，从而间接引用（拥有）了构造对象中的prototype对象； <br /><br />如图：<img class="magplus" title="点击查看原始大小图片" height="400" src="http://dl.iteye.com/upload/picture/pic/47469/bcc49472-57dd-34c6-8d3a-f7667bcbe080.jpg" width="700"  alt="" /> <br /><br />此观点的文章：&nbsp;&nbsp; 参看 jimichan的文章：<a href="http://jimichan.iteye.com/blog/119815" target="_blank">详解javascript类继承机制的原理 </a>中的： <span style="color: red">&#8220;（说成间接的是因为每个object都有一个 constructor 属性指向它的构造函数）。&#8221;</span> <br /><span style="color: red">非常感谢在此问题上，作者对我的回信；如有冒犯，敬请原谅；</span> <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2：构造函数创建对象时，copy prototype中的属性和代码给所创建的对象。从而使创建的对象拥有了prototype中的所有功能和属性； <br /><br />如图：<img class="magplus" title="点击查看原始大小图片" height="572" src="http://dl.iteye.com/upload/picture/pic/47487/ea864896-ea56-3498-9c7b-33b12af23899.jpg" width="700"  alt="" /> <br /><br />此观点的文章：&nbsp;&nbsp; 参看 yiding_he的文章：<a href="http://www.iteye.com/topic/155109" target="_blank">领悟 JavaScript 中的面向对象</a> 中的：&nbsp; <span style="color: red">&#8220; 在 JavaScript 中，用 new 关键字创建对象是执行了下面三个步骤的： <br /><br />&nbsp;&nbsp; 1. 创建一个新的普通对象； <br />&nbsp;&nbsp; 2. 将方法对象的 prototype 属性的所有属性复制到新的普通对象中去。 <br />&nbsp;&nbsp; 3. 以新的普通对象作为上下文来执行方法对象。&#8221;</span> <br /><span style="color: blue">此观点在回贴中被 xieye反对</span> <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3：构造函数在创建对象时，把构造函数中的prototype引用赋给创建的普通对象；也就是说由构造函数创建的对象，都有一个指针指向prototype对象； <br /><br />如图：<img class="magplus" title="点击查看原始大小图片" height="581" src="http://dl.iteye.com/upload/picture/pic/47489/b9f6b9fe-6f09-3179-aaee-d5876f10535d.jpg" width="700"  alt="" /> <br /><br />此观点的文章：&nbsp;&nbsp; 参看 李站的文章：<a href="http://www.cnblogs.com/leadzen/archive/2008/02/25/1073404.html" target="_blank">悟透javascript</a>中的<span style="color: red">" 我们已经知道，用 var anObject = new aFunction() 形式创建对象的过程实际上可以分为三步：第一步是建立一个新对象；第二步将该对象内置的原型对象设置为构造函数prototype引用的那个原型对象；第三步就是将该对象作为this参数调用构造函数，完成成员设置等初始化工作。对象建立之后，对象上的任何访问和操作都只与对象自身及其原型链上的那串对象有关，与构造函数再扯不上关系了"</span>&nbsp;&nbsp; 以及&nbsp; <span style="color: red">&#8220;语法甘露 中的：上面代码的最后一句证明，新创建的对象的constructor属性返回的是Object函数。其实新建的对象自己及其原型里没有constructor属性，那返回的只是最顶层原型对象的构造函数，即Object。&#8221; <br /></span><br /><br /><br /><br />综上所述：根据贴子：<a href="http://www.iteye.com/topic/155109" target="_blank">领悟 JavaScript 中的面向对象</a> 中作者 afcn0的回贴 <span style="color: red">&#8220;其实还有补充,就是如果构造函数返回object类型,那new对象无效,prototype问题是楼主还不太了解prototype继承方式,__proto__属性,以及isPrototypeOf方法所至 &#8221;</span> 的提示，查阅了文章：<a href="http://bbs.cnw.com.cn/archiver/tid-209757.html" target="_blank">javascript中的继承</a> <br /><br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Html代码 <a title="复制代码" href="http://yangsp1.iteye.com/blog/499264#"></a>&nbsp;<a title="收藏这段代码" href="javascript:void()"></a></div></div>
<ol class="dp-xml"><li><span>此文中提到：</span><span class="attribute"><font color="#ff0000">jane</font></span><span>&nbsp;=&nbsp;</span><span class="attribute-value"><font color="#0000ff">new</font></span><span>&nbsp;Engineer("Doe,&nbsp;Jane",&nbsp;["navigator",&nbsp;"javascript"],&nbsp;"belau"); &nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;</span></li><li><span>　　调用这句时，都发生了什么: &nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;</span></li><li><span>　　1　&nbsp;当js看见new操作符，它创建一个新的普通对象,并且设置它的__proto__&nbsp;属性为Engineer.prototype。 &nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;</span></li><li><span>　　2&nbsp;new&nbsp;操作符传递这个新的对象作为Engineer&nbsp;构造器的this的值。 &nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;</span></li><li><span>　　其实最主要做的事就是上面的两件，剩下的都是很简单的函数调用.&nbsp;&nbsp;</span></li></ol></div><pre class="html" title="JavaScript  prototype整理（网上的三种理解）" style="display: none" pre_index="0" source_url="http://yangsp1.iteye.com/blog/499264" codeable_type="Blog" codeable_id="499264" name="code">此文中提到：jane = new Engineer("Doe, Jane", ["navigator", "javascript"], "belau");

　　调用这句时，都发生了什么:

　　1　 当js看见new操作符，它创建一个新的普通对象,并且设置它的__proto__ 属性为Engineer.prototype。

　　2 new 操作符传递这个新的对象作为Engineer 构造器的this的值。

　　其实最主要做的事就是上面的两件，剩下的都是很简单的函数调用.
</pre><br /><br /><br />根据上文的提示作了简单测试： <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Javascript代码 <a title="复制代码" href="http://yangsp1.iteye.com/blog/499264#"></a>&nbsp;<a title="收藏这段代码" href="javascript:void()"></a></div></div>
<ol class="dp-c"><li><span class="keyword">function</span><span>&nbsp;person(name,b){ &nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.name=name; &nbsp;&nbsp;</span></span></li><li><span>} &nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;</span></li><li><span>person.prototype.sayHello=</span><span class="keyword">function</span><span>(a){ &nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//alert("hello,i&nbsp;am&nbsp;"+this.name); </span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;alert(</span><span class="keyword">this</span><span>==a); &nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;</span></li><li><span></span><span class="keyword">function</span><span>&nbsp;employee(name,&nbsp;salary) &nbsp;&nbsp;</span></span></li><li><span>{ &nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;person.call(</span><span class="keyword">this</span><span>,&nbsp;name);&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//调用上层构造函数 </span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.salary&nbsp;=&nbsp;salary;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//扩展的成员 </span><span>&nbsp;&nbsp;</span></span></li><li><span>}; &nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;</span></li><li><span></span><span class="keyword">var</span><span>&nbsp;p=</span><span class="keyword">new</span><span>&nbsp;person(</span><span class="string">"yangsp"</span><span>,p); &nbsp;&nbsp;</span></span></li><li><span></span><span class="comment">//p.sayHello(p); </span><span>&nbsp;&nbsp;</span></span></li><li><span></span><span class="comment">//alert(p.constructor); </span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;</span></li><li><span></span><span class="comment">//下面两句验证了普通对象中确有_proto_属性，且引用的是prototype对象；（在ff下调试，ie下不可）； </span><span>&nbsp;&nbsp;</span></span></li><li><span>alert(p.__proto__==person); &nbsp;&nbsp;</span></li><li><span>alert(p.__proto__==person.prototype)) &nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;</span></li><li><span></span><span class="comment">//alert("p有prototype属性吗?&nbsp;"+p.prototype);&nbsp;&nbsp;&nbsp;&nbsp;//表明普通对象中没有prototype属性;&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><span>&nbsp;&nbsp;</span></span></li></ol></div><pre class="javascript" title="JavaScript  prototype整理（网上的三种理解）" style="display: none" pre_index="1" source_url="http://yangsp1.iteye.com/blog/499264" codeable_type="Blog" codeable_id="499264" name="code">function person(name,b){
	this.name=name;
}

person.prototype.sayHello=function(a){
	//alert("hello,i am "+this.name);
	alert(this==a);
	}


function employee(name, salary)
{
    person.call(this, name);    //调用上层构造函数
    this.salary = salary;       //扩展的成员
};

var p=new person("yangsp",p);
//p.sayHello(p);
//alert(p.constructor);

//下面两句验证了普通对象中确有_proto_属性，且引用的是prototype对象；（在ff下调试，ie下不可）；
alert(p.__proto__==person);
alert(p.__proto__==person.prototype))

//alert("p有prototype属性吗? "+p.prototype);	//表明普通对象中没有prototype属性;								


</pre><br /><br />总结： 
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Html代码 <a title="复制代码" href="http://yangsp1.iteye.com/blog/499264#"></a>&nbsp;<a title="收藏这段代码" href="javascript:void()"></a></div></div>
<ol class="dp-xml"><li><span>比较赞同第三种理解； &nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;即：prototype是function对象中专有的属性。 &nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_proto_是普通对象的隐式属性，在new的时候，会指向prototype所指的对象； &nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;普通对象中的constructor属性指向构造函数，因此一个用构造函数创建的对象可能有两种方式关联到prototype.但继承应该是根据_proto_关联到prototype属性；&nbsp;&nbsp;</span></li></ol></div><pre class="html" title="JavaScript  prototype整理（网上的三种理解）" style="display: none" pre_index="2" source_url="http://yangsp1.iteye.com/blog/499264" codeable_type="Blog" codeable_id="499264" name="code">比较赞同第三种理解；
      即：prototype是function对象中专有的属性。
          _proto_是普通对象的隐式属性，在new的时候，会指向prototype所指的对象；
          普通对象中的constructor属性指向构造函数，因此一个用构造函数创建的对象可能有两种方式关联到prototype.但继承应该是根据_proto_关联到prototype属性；
</pre><br /><br />另外：<a href="http://interglacial.com/javascript_spec/a-4.html#a-4.3.3" target="_blank">ecma-262</a>中提到：every object created by that constructor has an implicit reference to the prototype (called the object's prototype) associated with its constructor 以及其图示；不敢肯定它的implicit reference间接还是隐式链接； <br /><br /><br /></div><img src ="http://www.blogjava.net/liuyz2006/aggbug/385784.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/liuyz2006/" target="_blank">阿者</a> 2012-08-19 21:09 <a href="http://www.blogjava.net/liuyz2006/articles/385784.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>encodeURIComponent的使用</title><link>http://www.blogjava.net/liuyz2006/articles/385742.html</link><dc:creator>阿者</dc:creator><author>阿者</author><pubDate>Sat, 18 Aug 2012 12:49:00 GMT</pubDate><guid>http://www.blogjava.net/liuyz2006/articles/385742.html</guid><wfw:comment>http://www.blogjava.net/liuyz2006/comments/385742.html</wfw:comment><comments>http://www.blogjava.net/liuyz2006/articles/385742.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/liuyz2006/comments/commentRss/385742.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/liuyz2006/services/trackbacks/385742.html</trackback:ping><description><![CDATA[<div><p><strong><span style="font-size: medium; font-family: arial,helvetica,sans-serif;">encodeURIComponent的使用</span>  </strong></p> <p><strong><span style="font-size: medium; font-family: arial,helvetica,sans-serif"><br /></span></strong></p> <p><span style="font-size: medium; font-family: arial,helvetica,sans-serif">在说明encodeURIComponent前先介绍下</span>  <strong>escape,encodeURI,encodeURIComponent</strong> <span style="font-size: medium; font-family: arial,helvetica,sans-serif">这三个，主要是从其他地方转过来的（http://blog.csdn.net/fengzi_shen/archive/2009/04/01/4041488.aspx）。</span>  </p> <p><span style="font-size: medium; font-family: arial,helvetica,sans-serif">js对文字进行编码涉及3个函数：escape,encodeURI,encodeURIComponent，相应3个解码函数：unescape,decodeURI,decodeURIComponent<br /><br />1、&nbsp;&nbsp;  传递参数时需要使用encodeURIComponent，这样组合的url才不会被#等特殊字符截断。&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;  <br /><br />例如：&lt;script language="javascript"&gt;document.write('&lt;a  href="http://passport.baidu.com/?logout&amp;aid=7&amp;u='+encodeURIComponent("http://cang.baidu.com/bruce42")+'"&gt;退出&lt;/a&gt;');&lt;/script&gt;<br /><br />2、&nbsp;&nbsp;  进行url跳转时可以整体使用encodeURI<br /><br />例如：Location.href=encodeURI("http://cang.baidu.com/do/s?word=百度&amp;ct=21");<br /><br />3、&nbsp;&nbsp;  js使用数据时可以使用escape<br /><br />[Huoho.Com编辑]<br /><br />例如：搜藏中history纪录。<br /><br />4、&nbsp;&nbsp;  escape对0-255以外的unicode值进行编码时输出%u****格式，其它情况下escape，encodeURI，encodeURIComponent编码结果相同。<br /><br /><br />最多使用的应为encodeURIComponent，它是将中文、韩文等特殊字符转换成utf-8格式的url编码，所以如果给后台传递参数需要使用encodeURIComponent时需要后台解码对utf-8支持（form中的编码方式和当前页面编码方式相同）<br /><br />escape不编码字符有69个：*，+，-，.，/，@，_，0-9，a-z，A-Z<br /><br />encodeURI不编码字符有82个：!，#，$，&amp;，'，(，)，*，+，,，-，.，/，:，;，=，?，@，_，~，0-9，a-z，A-Z<br /><br />encodeURIComponent不编码字符有71个：!，  '，(，)，*，-，.，_，~，0-9，a-z，A-Z<br /><br /><br /><strong>现在说下我在传递非英文字符串的处理：</strong>  </span></p> <p><span style="font-size: medium; font-family: arial,helvetica,sans-serif"><strong>&nbsp;&nbsp;&nbsp;  URL：</strong>  addressgrp.action?oper=addgrp&amp;groupname="+encodeURIComponent(groupsname)</span>  </p> <p><span style="font-size: medium; font-family: arial,helvetica,sans-serif">&nbsp;&nbsp;  在action获取</span> <span style="font-size: medium; font-family: arial,helvetica,sans-serif">groupname（</span>  <span style="font-size: medium; font-family: arial,helvetica,sans-serif">getGroupname()</span>  <span style="font-size: medium; font-family: arial,helvetica,sans-serif">）时并没有进过编码转化，获取的信息并不正确，经过尝试发现需要进行一次编码转换：String  grpname= new String(getGroupname().getBytes("ISO-8859-1"), "UTF-8");</span> </p> <p><span style="font-size: medium; font-family: arial,helvetica,sans-serif">在网上搜索相关的信息，网上提供了另一种方法：在页面上进行两次编码操作，然后在后台再进行一次解码，这是由于java后台在获取数据时已经进行了一次解码，可问题是进行一次解码后的数据并不正确，而如果在页面中编码两次然后在后台进行一次解码就可以获取真确的数据。页面URL：</span>  <span style="font-size: medium; font-family: arial,helvetica,sans-serif">addressgrp.action?oper=addgrp&amp;groupname="+</span>  <span style="font-size: medium; font-family: arial,helvetica,sans-serif">encodeURIComponent（</span>  <span style="font-size: medium; font-family: arial,helvetica,sans-serif">encodeURIComponent(groupsname)）</span>  </p> <p><span style="font-size: medium; font-family: arial,helvetica,sans-serif">后台获取数据：</span>  <span style="font-size: medium; font-family: arial,helvetica,sans-serif">String  grpname</span> <span style="font-size: medium; font-family: arial,helvetica,sans-serif">=java.net.URLDecoder.decode(</span>  <span style="font-size: medium; font-family: arial,helvetica,sans-serif">getGroupname()</span>  <span style="font-size: medium; font-family: arial,helvetica,sans-serif">,"UTF-8")</span></p></div><img src ="http://www.blogjava.net/liuyz2006/aggbug/385742.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/liuyz2006/" target="_blank">阿者</a> 2012-08-18 20:49 <a href="http://www.blogjava.net/liuyz2006/articles/385742.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>escape()、encodeURI()、encodeURIComponent()区别详解</title><link>http://www.blogjava.net/liuyz2006/articles/385740.html</link><dc:creator>阿者</dc:creator><author>阿者</author><pubDate>Sat, 18 Aug 2012 12:47:00 GMT</pubDate><guid>http://www.blogjava.net/liuyz2006/articles/385740.html</guid><wfw:comment>http://www.blogjava.net/liuyz2006/comments/385740.html</wfw:comment><comments>http://www.blogjava.net/liuyz2006/articles/385740.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/liuyz2006/comments/commentRss/385740.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/liuyz2006/services/trackbacks/385740.html</trackback:ping><description><![CDATA[<div class="postTitle">
<h1><a class="postTitle2" id="cb_post_title_url" href="http://www.cnblogs.com/qiantuwuliang/archive/2009/07/19/1526687.html"><span style="font-size: 14pt">escape()、encodeURI()、encodeURIComponent()区别详解</span></a></h1></div>
<div id="cnblogs_post_body">
<p>JavaScript中有三个可以对字符串编码的函数，分别是： escape,encodeURI,encodeURIComponent，相应3个解码函数：unescape,decodeURI,decodeURIComponent 。 </p>
<p>下面简单介绍一下它们的区别 </p>
<p><strong style="color: red">1 escape()函数</strong><span style="color: red"> </span></p>
<p>定义和用法 <br />escape() 函数可对字符串进行编码，这样就可以在所有的计算机上读取该字符串。 </p>
<p>语法 <br />escape(string)</p>
<p>参数&nbsp; 描述&nbsp; <br />string&nbsp; 必需。要被转义或编码的字符串。&nbsp; </p>
<p>返回值 <br />已编码的 string 的副本。其中某些字符被替换成了十六进制的转义序列。 </p>
<p>说明 <br />该方法不会对 ASCII 字母和数字进行编码，也不会对下面这些 ASCII 标点符号进行编码： - _ . ! ~ * ' ( ) 。其他所有的字符都会被转义序列替换。 </p>
<p>&nbsp;</p>
<p><br /><strong style="color: red">2 encodeURI()函数 </strong><strong><br /></strong>定义和用法 <br />encodeURI() 函数可把字符串作为 URI 进行编码。 </p>
<p>语法 <br />encodeURI(URIstring)</p>
<p>参数&nbsp; 描述&nbsp; <br />URIstring&nbsp; 必需。一个字符串，含有 URI 或其他要编码的文本。&nbsp; </p>
<p>返回值 <br />URIstring 的副本，其中的某些字符将被十六进制的转义序列进行替换。 </p>
<p>说明 <br />该方法不会对 ASCII 字母和数字进行编码，也不会对这些 ASCII 标点符号进行编码： - _ . ! ~ * ' ( ) 。 </p>
<p>该方法的目的是对 URI 进行完整的编码，因此对以下在 URI 中具有特殊含义的 ASCII 标点符号，encodeURI() 函数是不会进行转义的：;/?:@&amp;=+$,# </p>
<p>&nbsp;</p>
<p><br /><strong style="color: red">3 encodeURIComponent() 函数</strong><span style="color: red"> </span></p>
<p>定义和用法 <br />encodeURIComponent() 函数可把字符串作为 URI 组件进行编码。 </p>
<p>语法 <br />encodeURIComponent(URIstring)</p>
<p>参数&nbsp; 描述&nbsp; <br />URIstring&nbsp; 必需。一个字符串，含有 URI 组件或其他要编码的文本。&nbsp; </p>
<p>返回值 <br />URIstring 的副本，其中的某些字符将被十六进制的转义序列进行替换。 </p>
<p>说明 <br />该方法不会对 ASCII 字母和数字进行编码，也不会对这些 ASCII 标点符号进行编码： - _ . ! ~ * ' ( ) 。 </p>
<p>其他字符（比如 ：;/?:@&amp;=+$,# 这些用于分隔 URI 组件的标点符号），都是由一个或多个十六进制的转义序列替换的。 </p>
<p>提示和注释 <br />提示：请注意 encodeURIComponent() 函数 与 encodeURI() 函数的区别之处，前者假定它的参数是 URI 的一部分（比如协议、主机名、路径或查询字符串）。因此 encodeURIComponent() 函数将转义用于分隔 URI 各个部分的标点符号。 </p>
<p>&nbsp;</p>
<p><strong style="color: red">4 总结：</strong><span style="color: red"> </span></p>
<p>&nbsp;通过对三个函数的分析，我们可以知道：escape()除了 ASCII 字母、数字和特定的符号外，对传进来的字符串全部进行转义编码，因此如果想对URL编码，最好不要使用此方法。而encodeURI() 用于编码整个URI,因为URI中的合法字符都不会被编码转换。encodeURIComponent方法在编码单个URIComponent（指请求参数）应当是最常用的，它可以讲参数中的中文、特殊字符进行转义，而不会影响整个URL。</p>
<p>&nbsp;</p>
<p><strong style="color: red">5 示例：</strong> </p>
<p><strong>1 escape()</strong> </p>
<p>&lt;script type="text/javascript"&gt;</p>
<p>document.write(escape("<a href="http://www.w3school.com.cn/">http://www.w3school.com.cn/</a>") + "&lt;br /&gt;")</p>
<p>document.write(escape("?!=()#%&amp;"))</p>
<p>&lt;/script&gt;输出：</p>
<p>http%3A//www.w3school.com.cn</p>
<p>%3F%21%3D%28%29%23%25%26<br /><br /><strong>2 encodeURI()</strong> </p>
<p>&lt;script type="text/javascript"&gt;</p>
<p>document.write(encodeURI("<a href="http://www.w3school.com.cn/">http://www.w3school.com.cn/</a>")+ "&lt;br /&gt;")</p>
<p>document.write(encodeURI("<a href="http://www.w3school.com.cn/My">http://www.w3school.com.cn/My</a> first/"))</p>
<p>document.write(encodeURI(",/?:@&amp;=+$#"))</p>
<p>&lt;/script&gt;输出：</p>
<p><a href="http://www.w3school.com.cn/">http://www.w3school.com.cn/</a></p>
<p><a href="http://www.w3school.com.cn/My%20first/">http://www.w3school.com.cn/My%20first/</a></p>
<p>,/?:@&amp;=+$#</p>
<p>对整个URL进行编码，而URL的特定标识符不会被转码。</p>
<p><strong>3 encodeURIComponent()</strong></p>
<p>例1：</p>
<p>&lt;script type="text/javascript"&gt;</p>
<p>document.write(encodeURIComponent("<a href="http://www.w3school.com.cn/">http://www.w3school.com.cn/</a>"))</p>
<p>document.write("&lt;br /&gt;")</p>
<p>document.write(encodeURIComponent("<a href="http://www.w3school.com.cn/p">http://www.w3school.com.cn/p</a> 1/"))</p>
<p>document.write("&lt;br /&gt;")</p>
<p>document.write(encodeURIComponent(",/?:@&amp;=+$#"))</p>
<p>&lt;/script输出：</p>
<p>http%3A%2F%2Fwww.w3school.com.cn <br />http%3A%2F%2Fwww.w3school.com.cn%2Fp%201%2F <br />%2C%2F%3F%3A%40%26%3D%2B%24%23<br />例2：&lt;script language="javascript"&gt;document.write('</p>
<p>&lt;a href="<a href="http://passport.baidu.com/?logout&amp;aid=7&amp;u='+encodeURIComponent(&quot;http://cang.baidu.com/bruce42&quot;)+'">http://passport.baidu.com/?logout&amp;aid=7&amp;u='+encodeURIComponent("http://cang.baidu.com/bruce42")+'</a>"&gt;退出&lt;/a&gt;');&lt;/script&gt;</p>
<p>对URL中的参数进行编码，因为参数也是一个URL，如果不编码会影响整个URL的跳转。</p></div><img src ="http://www.blogjava.net/liuyz2006/aggbug/385740.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/liuyz2006/" target="_blank">阿者</a> 2012-08-18 20:47 <a href="http://www.blogjava.net/liuyz2006/articles/385740.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Extjs中的迭代方法 </title><link>http://www.blogjava.net/liuyz2006/articles/384808.html</link><dc:creator>阿者</dc:creator><author>阿者</author><pubDate>Sun, 05 Aug 2012 06:54:00 GMT</pubDate><guid>http://www.blogjava.net/liuyz2006/articles/384808.html</guid><wfw:comment>http://www.blogjava.net/liuyz2006/comments/384808.html</wfw:comment><comments>http://www.blogjava.net/liuyz2006/articles/384808.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/liuyz2006/comments/commentRss/384808.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/liuyz2006/services/trackbacks/384808.html</trackback:ping><description><![CDATA[<div class="article_title"><span class="ico ico_type_Repost"></span>
<h3><span class="link_title"><a href="http://blog.csdn.net/h396071018/article/details/6876660">Extjs中的迭代方法 </a></span></h3></div>
<div class="article_manage"><span class="link_categories">分类： <a href="http://blog.csdn.net/h396071018/article/category/877078">extjs</a> </span><span class="link_postdate">2011-10-15 19:16</span> <span class="link_view" title="阅读次数">49人阅读</span> <span class="link_comments" title="评论次数"><a href="http://blog.csdn.net/h396071018/article/details/6876660#comments">评论</a>(0)</span> <span class="link_collect"><a title="收藏" href="javascript:void(0);">收藏</a></span> <span class="link_report"><a title="举报" href="http://blog.csdn.net/h396071018/article/details/6876660#report">举报</a></span> </div>
<div class="article_content" id="article_content"><span style="font-size: 14px; line-height: 24px; font-family: Simsun"></span>
<p style="border-top-width: 0px; margin-top: 0px; border-left-width: 0px; border-bottom-width: 0px; margin-bottom: 0px; padding-bottom: 5px; text-indent: 0px; padding-top: 5px; border-right-width: 0px">EXTJS 有很多的迭代方法，例如,你也许已知道的Ext.each，但还有另外一些不为人知且很有用的方法。首先，简要回顾下Ext.each:</p>
<h2 style="padding-right: 0px; padding-left: 0px; font-size: 12px; padding-bottom: 0px; margin: 0px; padding-top: 0px">Ext.each</h2>
<p style="border-top-width: 0px; margin-top: 0px; border-left-width: 0px; border-bottom-width: 0px; margin-bottom: 0px; padding-bottom: 5px; text-indent: 0px; padding-top: 5px; border-right-width: 0px">为每一个数组的成员应用同一个方法，它基本上是一个更方便的循环形式</p><pre class="code">var people = ['Bill', 'Saul', 'Gaius'];

//using each to detect Cylons:
Ext.each(people, function (person, index)
{
    var cylon = (index + 1) % 2 == 0; //every second man is a toaster
    alert(person + (cylon ? ' is ' : ' is not ') + 'a fraking cylon');
});

//is the same as
for (var i = 0; i &lt; people.length; i++)
{
    var person = people[i];
    var cylon = (index + 1) % 2 == 0; //every second man is a toaster

    alert(person + (cylon ? ' is ' : ' is not ') + 'a frakin cylon');
};</pre><br />
<h2 style="padding-right: 0px; padding-left: 0px; font-size: 12px; padding-bottom: 0px; margin: 0px; padding-top: 0px">Ext.iterate</h2>Ext.iterate 与 Ext.each 类似针对非数组对象. 通常用在for-in 循环中: <pre class="code">var ships = { 'Bill': 'Galactica', 'Laura': 'Colonial One' };

Ext.iterate(ships, function (key, value)
{
    alert(key + "'s ship is the " + value);
});

//is the same as
for (key in ships)
{
    var value = ships[key];
    alert(key + "'s ship is the " + value);
}</pre>
<p style="border-top-width: 0px; margin-top: 0px; border-left-width: 0px; border-bottom-width: 0px; margin-bottom: 0px; padding-bottom: 5px; text-indent: 0px; padding-top: 5px; border-right-width: 0px">用Ext.iterate在数组上，与Ext.each完全相同。&nbsp;<br />each和iterate方法都有第三个可选参数scope。&nbsp;<br />另一个有用的技巧是你可以更方便的重用相同的方法:</p><pre class="code">var myFunction = function (item, index)
{
    //does some clever thing
}

Ext.each(people, myFunction);
Ext.each(['another', 'array'], myFunction);</pre><br />
<h2 style="padding-right: 0px; padding-left: 0px; font-size: 12px; padding-bottom: 0px; margin: 0px; padding-top: 0px">Ext.pluck</h2>(4.0.0之后过时) Ext.pluck从对象数组捕获特定的属性 <pre class="code">var animals = [
  { name: 'Ed', species: 'Unknown' },
  { name: 'Bumble', species: 'Cat' },
  { name: 'Triumph', species: 'Insult Dog' }
];

Ext.pluck(animals, 'species'); //returns ['Unknown', 'Cat', 'Insult Dog']
Ext.pluck(animals, 'name'); //returns ['Ed', 'Bumble', 'Triumph']
</pre>
<p style="border-top-width: 0px; margin-top: 0px; border-left-width: 0px; border-bottom-width: 0px; margin-bottom: 0px; padding-bottom: 5px; text-indent: 0px; padding-top: 5px; border-right-width: 0px">此方法自4.0.0不建议使用，请用Ext.Array.pluck代替.</p>
<h2 style="padding-right: 0px; padding-left: 0px; font-size: 12px; padding-bottom: 0px; margin: 0px; padding-top: 0px">Ext.invoke</h2>
<p style="border-top-width: 0px; margin-top: 0px; border-left-width: 0px; border-bottom-width: 0px; margin-bottom: 0px; padding-bottom: 5px; text-indent: 0px; padding-top: 5px; border-right-width: 0px">(4.0.0之后过时)数组中所有成员调用同一个方法，并返回结果，使用用上例animals：</p><pre class="code">var describeAnimal = function (animal)
{
    return String.format("{0} is a {1}", animal.name, animal.species);
}

var describedAnimals = Ext.invoke(animals, describeAnimal);
console.log(describedAnimals); // ['Ed is a Unknown', 'Bumble is a Cat', 'Triumph is a Insult Dog'];
</pre>
<p style="border-top-width: 0px; margin-top: 0px; border-left-width: 0px; border-bottom-width: 0px; margin-bottom: 0px; padding-bottom: 5px; text-indent: 0px; padding-top: 5px; border-right-width: 0px">Ext.invoke与Ruby的集合方法类似，使得更容易转换数组，任何增加的参数都可通过Ext.invoke传递。&nbsp;<br />此方法自4.0.0不建议使用，4.X系列版本后将被移除。</p>
<h2 style="padding-right: 0px; padding-left: 0px; font-size: 12px; padding-bottom: 0px; margin: 0px; padding-top: 0px">Ext.Partition</h2>
<p style="border-top-width: 0px; margin-top: 0px; border-left-width: 0px; border-bottom-width: 0px; margin-bottom: 0px; padding-bottom: 5px; text-indent: 0px; padding-top: 5px; border-right-width: 0px">Ext.Partition将数组拆分成两部分。</p><pre class="code">var trees = [
  { name: 'Oak', height: 20 },
  { name: 'Willow', height: 10 },
  { name: 'Cactus', height: 5 }
];

var isTall = function (tree) { return tree.height &gt; 15 };

Ext.partition(trees, isTall);

//returns:
[
  [{ name: 'Oak', height: 20}],
  [{ name: 'Willow', height: 10 }, { name: 'Cactus', height: 5}]
]</pre>
<p style="border-top-width: 0px; margin-top: 0px; border-left-width: 0px; border-bottom-width: 0px; margin-bottom: 0px; padding-bottom: 5px; text-indent: 0px; padding-top: 5px; border-right-width: 0px">此方法自4.0.0不建议使用，4.X系列版本后将被移除。</p>
<h2 style="padding-right: 0px; padding-left: 0px; font-size: 12px; padding-bottom: 0px; margin: 0px; padding-top: 0px">数学方法</h2><pre class="code">var numbers = [1, 2, 3, 4, 5];
Ext.min(numbers); //1
Ext.max(numbers); //5
Ext.sum(numbers); //15
Ext.mean(numbers); //3
</pre></div><img src ="http://www.blogjava.net/liuyz2006/aggbug/384808.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/liuyz2006/" target="_blank">阿者</a> 2012-08-05 14:54 <a href="http://www.blogjava.net/liuyz2006/articles/384808.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jsp-&gt;json</title><link>http://www.blogjava.net/liuyz2006/articles/384803.html</link><dc:creator>阿者</dc:creator><author>阿者</author><pubDate>Sun, 05 Aug 2012 04:26:00 GMT</pubDate><guid>http://www.blogjava.net/liuyz2006/articles/384803.html</guid><wfw:comment>http://www.blogjava.net/liuyz2006/comments/384803.html</wfw:comment><comments>http://www.blogjava.net/liuyz2006/articles/384803.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/liuyz2006/comments/commentRss/384803.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/liuyz2006/services/trackbacks/384803.html</trackback:ping><description><![CDATA[<p>一、不传URL<br />view plaincopy to clipboardprint?<br />var myData={ "Head":[<br />&nbsp;&nbsp;&nbsp; { "UserName":"admin","Name":"李亚斌","Gender":"M","Password":"123456","Status":"0","Department":"技术部","Title":"程序员","Email":" 0:00:00","ModifyUser":"1","ModifyTime":"2009-10-30 10:04:22"},<br />&nbsp;&nbsp;&nbsp; { "UserName":"00001","Name":"李香兰","Gender":"F","Password":"123456","Status":"0","Department":"技术部","Title":"程序员","Email":" 0:00:00","ModifyUser":"","ModifyTime":""}<br />&nbsp;&nbsp;&nbsp; ]<br />}</p>
<p>var ds = new Ext.data.Store({<br />&nbsp;&nbsp;&nbsp; //proxy: new Ext.data.MemoryProxy(myData),<br />&nbsp;&nbsp;&nbsp; reader: new Ext.data.JsonReader({root: 'Head'},<br />&nbsp;&nbsp;&nbsp; [{name:'UserName'},{name: 'Name'}, {name:'Gender'},{name:'Password'},{name:'Status'},{name:'Department'},{name:'Title'},{name:'Email'},{name:'OfficePhone'}])<br />});<br />ds.loadData(myData)</p>
<p>或者</p>
<p>var ds = new Ext.data.Store({<br />&nbsp;&nbsp;&nbsp; proxy: new Ext.data.MemoryProxy(myData),<br />&nbsp;&nbsp;&nbsp; reader: new Ext.data.JsonReader({root: 'Head'},<br />&nbsp;&nbsp;&nbsp; [{name:'UserName'},{name: 'Name'}, {name:'Gender'},{name:'Password'},{name:'Status'},{name:'Department'},{name:'Title'},{name:'Email'},{name:'OfficePhone'}])<br />});<br />//注意下面这句 切记<br />ds.load()都可以</p>
<p>&nbsp;</p>
<p>二、使用URL<br />(1)JSON HTMLPage.htm页面做数据源</p>
<p>{"Head":[{"appeId":"1","survId":"1","location":"","surveyDate":"2008-03-14","surveyTime":"12:19:47","inputUserId":"1","inputTime":"2008-03-14 12:21:51","modifyTime":"0000-00-00 00:00:00"},{"appeId":"2","survId":"32","location":"","surveyDate":"2008-03-14","surveyTime":"22:43:09","inputUserId":"32","inputTime":"2008-03-14 22:43:37","modifyTime":"0000-00-00 00:00:00"},{"appeId":"3","survId":"32","location":"","surveyDate":"2008-03-15","surveyTime":"07:59:33","inputUserId":"32","inputTime":"2008-03-15 08:00:44","modifyTime":"0000-00-00 00:00:00"},{"appeId":"4","survId":"1","location":"","surveyDate":"2008-03-15","surveyTime":"10:45:42","inputUserId":"1","inputTime":"2008-03-15 10:46:04","modifyTime":"0000-00-00 00:00:00"},{"appeId":"5","survId":"32","location":"","surveyDate":"2008-03-16","surveyTime":"08:04:49","inputUserId":"32","inputTime":"2008-03-16 08:05:26","modifyTime":"0000-00-00 00:00:00"},{"appeId":"6","survId":"32","location":"","surveyDate":"2008-03-20","surveyTime":"20:19:01","inputUserId":"32","inputTime":"2008-03-20 20:19:32","modifyTime":"0000-00-00 00:00:00"}]}<br />{"Head":[{"appeId":"1","survId":"1","location":"","surveyDate":"2008-03-14","surveyTime":"12:19:47","inputUserId":"1","inputTime":"2008-03-14 12:21:51","modifyTime":"0000-00-00 00:00:00"},{"appeId":"2","survId":"32","location":"","surveyDate":"2008-03-14","surveyTime":"22:43:09","inputUserId":"32","inputTime":"2008-03-14 22:43:37","modifyTime":"0000-00-00 00:00:00"},{"appeId":"3","survId":"32","location":"","surveyDate":"2008-03-15","surveyTime":"07:59:33","inputUserId":"32","inputTime":"2008-03-15 08:00:44","modifyTime":"0000-00-00 00:00:00"},{"appeId":"4","survId":"1","location":"","surveyDate":"2008-03-15","surveyTime":"10:45:42","inputUserId":"1","inputTime":"2008-03-15 10:46:04","modifyTime":"0000-00-00 00:00:00"},{"appeId":"5","survId":"32","location":"","surveyDate":"2008-03-16","surveyTime":"08:04:49","inputUserId":"32","inputTime":"2008-03-16 08:05:26","modifyTime":"0000-00-00 00:00:00"},{"appeId":"6","survId":"32","location":"","surveyDate":"2008-03-20","surveyTime":"20:19:01","inputUserId":"32","inputTime":"2008-03-20 20:19:32","modifyTime":"0000-00-00 00:00:00"}]}</p>
<p>相应的ext代码<br />&nbsp; <br />&nbsp;&nbsp;&nbsp; Ext.onReady(function(){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var proxy=new Ext.data.HttpProxy({url:'HTMLPage.htm'});<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //定义reader<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var reader=new Ext.data.JsonReader({ root:'Head' },<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {name: 'appeId', mapping: 'appeId'},<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {name: 'survId'},<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {name: 'location'},<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {name: 'surveyDate'},<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {name: 'surveyTime'},<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {name: 'inputUserId'}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //构建Store<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var store=new Ext.data.Store(&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; proxy:proxy,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; reader:reader<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; });<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //载入<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; store.load();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // create the grid<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var grid = new Ext.grid.GridPanel({<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; store: store,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; columns: [<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {header: "appeId", width: 60, dataIndex: 'appeId', sortable: true},<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {header: "survId", width: 60, dataIndex: 'survId', sortable: true},<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {header: "location", width: 60, dataIndex: 'location', sortable: true},<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {header: "surveyDate", width: 100, dataIndex: 'surveyDate', sortable: true},<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {header: "surveyTime", width: 100, dataIndex: 'surveyTime', sortable: true},<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {header: "inputUserId", width:80, dataIndex: 'inputUserId', sortable: true}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ],<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; renderTo:'example-grid',<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; width:540,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; height:200<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; });<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; });</p>
<p><br />&nbsp;&nbsp;&nbsp; (2).如果json 数据中 没有数据标题"Head&#8220;只需要把reader改成 如下即可：其他不需要改变<br />&nbsp;&nbsp;&nbsp; view plaincopy to clipboardprint?<br />&nbsp;&nbsp;&nbsp; //定义reader<br />&nbsp;&nbsp;&nbsp; var reader=new Ext.data.JsonReader({},<br />&nbsp;&nbsp;&nbsp; [<br />&nbsp;&nbsp;&nbsp; {name: 'appeId', mapping: 'appeId'},<br />&nbsp;&nbsp;&nbsp; {name: 'survId'},<br />&nbsp;&nbsp;&nbsp; {name: 'location'},<br />&nbsp;&nbsp;&nbsp; {name: 'surveyDate'},<br />&nbsp;&nbsp;&nbsp; {name: 'surveyTime'},<br />&nbsp;&nbsp;&nbsp; {name: 'inputUserId'}<br />&nbsp;&nbsp;&nbsp; ]<br />&nbsp;&nbsp;&nbsp; )</p>
<p>&nbsp;&nbsp;&nbsp; 经验小技巧：传data 的URL文件可为，html,aspx.js等，文件引用的js永远和 文件在同一路径。<br />&nbsp;&nbsp;&nbsp; 另外主要注意一下 HttpProxy 和MemoryProxy的区别，细心的读者可以看到 以上两种方法 使用的proxy使用的不同</p>
<p>&nbsp;&nbsp;&nbsp; MemoryProxy<br />&nbsp;&nbsp;&nbsp; MemoryProxy只能从JavaScript对象获得数据，可以直接把数组，或JSON和XML格式的数据交给它处理，如下面的代码所示。<br />&nbsp;&nbsp;&nbsp; var proxy = new Ext.data.MemoryProxy([<br />&nbsp;&nbsp;&nbsp; ['id1','name1','descn1'],<br />&nbsp;&nbsp;&nbsp; ['id2','name2','descn2']<br />&nbsp;&nbsp;&nbsp; ]);<br />&nbsp;&nbsp;&nbsp; HttpProxy<br />&nbsp;&nbsp;&nbsp; HttpProxy使用HTTP协议，通过Ajax去后台取数据，构造它时需要设置<a href="'xxx.jsp'">url:'xxx.jsp'</a>参数。这里的url可以替换成任何一个合法的网址，这样HttpProxy才知道去哪里获取数据，如下面的代码所示。<br />&nbsp;&nbsp;&nbsp; var proxy = new Ext.data.HttpProxy({url:'xxx.jsp'});<br />&nbsp;&nbsp;&nbsp; 后台需要返回EXT所需要的JSON格式的数据，下面的内容就是后台使用JSP的一个范例，如下面的代码所示。<br />&nbsp;&nbsp;&nbsp; response.setContentType("application/x-json");<br />&nbsp;&nbsp;&nbsp; Writer out = response.getWriter();<br />&nbsp;&nbsp;&nbsp; out.print("[" +<br />&nbsp;&nbsp;&nbsp; "['id1','name1','descn1']" +<br />&nbsp;&nbsp;&nbsp; "['id2','name2','descn2']" +<br />&nbsp;&nbsp;&nbsp; "]");<br />&nbsp;&nbsp;&nbsp; 请注意，这里的HttpProxy不支持跨域，它只能从同一域中获得数据。如果想跨域，请参考下面的ScriptTagProxy。<br />&nbsp;&nbsp;&nbsp; ScriptTagProxy<br />&nbsp;&nbsp;&nbsp; ScriptTagProxy的用法几乎和HttpProxy一样，如下面的代码所示。<br />&nbsp;&nbsp;&nbsp; var proxy = new Ext.data.ScriptTagProxy({url:'xxx.jsp'});<br />&nbsp;&nbsp;&nbsp; 从这里也看不出来它是如何支持跨域的，我们还需要在后台进行相应的处理，如下面的代码所示<br />&nbsp;&nbsp;&nbsp; String cb = request.getParameter("callback");<br />&nbsp;&nbsp;&nbsp; response.setContentType("text/javascript");<br />&nbsp;&nbsp;&nbsp; Writer out = response.getWriter();<br />&nbsp;&nbsp;&nbsp; out.write(cb + "(");<br />&nbsp;&nbsp;&nbsp; out.print("[" +<br />&nbsp;&nbsp;&nbsp; "['id1','name1','descn1']" +<br />&nbsp;&nbsp;&nbsp; "['id2','name2','descn2']" +<br />&nbsp;&nbsp;&nbsp; "]");<br />&nbsp;&nbsp;&nbsp; out.write(");");<br />&nbsp;&nbsp;&nbsp; 其 中的关键就在于从请求中获得的callback参数，这个参数叫做回调函数。ScriptTag- Proxy会在当前的HTML页面里添加一个&amp;lt;script type="text/javascript"src="/xxx.jsp"&amp;gt; &amp;lt;/script&amp;gt;标签，然后把后台返回的内容添加到这个标签中，这样就可以解决跨域访问数据的问题。为了让后台返回的内容可以在动态生成的 标签中运行，EXT会生成一个名为callback的回调函数，并把回调函数的名称传递给后台，由后台生成callback(data)形式的响应内容， 然后返回给前台自动运行。 <br /></p><img src ="http://www.blogjava.net/liuyz2006/aggbug/384803.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/liuyz2006/" target="_blank">阿者</a> 2012-08-05 12:26 <a href="http://www.blogjava.net/liuyz2006/articles/384803.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>DataReader/ArrayReader/JsonReader/XmlReader</title><link>http://www.blogjava.net/liuyz2006/articles/384797.html</link><dc:creator>阿者</dc:creator><author>阿者</author><pubDate>Sun, 05 Aug 2012 03:33:00 GMT</pubDate><guid>http://www.blogjava.net/liuyz2006/articles/384797.html</guid><wfw:comment>http://www.blogjava.net/liuyz2006/comments/384797.html</wfw:comment><comments>http://www.blogjava.net/liuyz2006/articles/384797.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/liuyz2006/comments/commentRss/384797.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/liuyz2006/services/trackbacks/384797.html</trackback:ping><description><![CDATA[<div class="content-head clearfix">
<h2 class="title content-title">DataReader/ArrayReader/JsonReader/XmlReader</h2></div>
<div class="content text-content clearfix" id="content">
<p>Ext.data.DataReader<br />纯虚类,从数据源得到结构化数据转换为元数据对象,对象包含Record的集合,一般用做Store对象的元数据,<br />具有如下格式<br />{<br />totalRecord:int,<br />records:Array of Ext.data.Record<br />}<br />具体使用参见三个子类<br />Ext.data.ArrayReader/Ext.data.JsonReader/Ext.data.XmlReader<br /><br /><br />方法<br />DataReader( Object meta, Object recordType )<br />构造<br /><br />Ext.data.ArrayReader<br />用于读数组到一个元数据对象<br /><br />ArrayReader( Object meta, Object recordType )<br />构造,第一个参数是配置除了可以指示使用哪个字段做id外,不懂其它的用法,<br />第二个参数是recordType与record对象的create方法的参数一样,是一样config对象数组,具体参见<br />readRecords( Object o ) : Object<br />读取o,返回一个元数据对象<br /><br />用例示范:<br />//定义数组<br />var arr=[ [1, 'Bill', 'Gardener'], [2, 'Ben', 'Horticulturalist'] ]; <br />var reader = new Ext.data.ArrayReader(<br />//以第一个元素做为recordid<br />&nbsp;&nbsp; {id: 0}, <br />//定义数组到record的映射关系<br />&nbsp;&nbsp; [<br />&nbsp;&nbsp;&nbsp; {name: 'name', mapping: 1},&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; {name: 'occupation', mapping: 2}&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp; ]<br />);<br />//生成元数据<br />var data=reader.readRecords(arr);<br /><br />Ext.data.JsonReader<br />用于将一个json对象转换为元数据对象<br /><br />JsonReader( Object meta, Object recordType )<br />JsonReader的构造参数meta可以有更多选择,<br />{<br />id : String,<br />root : String,<br />successProperty : String,<br />totalProperty : String<br />}<br />都是对应json对象的属性名<br /><br />read( Object response ) : Object<br />从一个response对象返回,response.responseText属性应仅含有一个json格式数据块<br /><br />readRecords( Object o ) : Object<br />读取o,返回一个元数据对象<br /><br />使用示例:<br />&nbsp;&nbsp;&nbsp;&nbsp; var json={ 'results': 2, 'rows': [<br />&nbsp;&nbsp;&nbsp; { 'id': 1, 'name': 'Bill', occupation: 'Gardener' },<br />&nbsp;&nbsp;&nbsp; { 'id': 2, 'name': 'Ben', occupation: 'Horticulturalist' } ]<br />};<br />&nbsp;&nbsp;&nbsp; var reader=new Ext.data.JsonReader(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; totalProperty: "results",//totalRecords属性由json.results得到<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; root: "rows",&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //构造元数据的数组由json.rows得到<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; id: "id"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //id由json.id得到<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; },[<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {name: 'name', mapping: 'name'}, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {name: 'occupation'}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //如果name与mapping同名,可以省略mapping<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ]<br />&nbsp;&nbsp;&nbsp; )<br />&nbsp;&nbsp;&nbsp; var data=reader.readRecords(json);<br /><br /><br /><br />Ext.data.XmlReader<br />xmlreader对象当然是为xml而准备的<br /><br />构造:<br />XmlReader( Object meta, Mixed recordType )<br />meta与jsonreader类似, <br />meta是一个{ <br />&nbsp;&nbsp;&nbsp; id : String,<br />&nbsp;&nbsp;&nbsp; record : String,<br />&nbsp;&nbsp;&nbsp; success : String,<br />&nbsp;&nbsp;&nbsp; totalRecords : String<br />}对象,只是这些字符串都是相对于文档根目录的domquery路径<br />read( Object response ) : Object<br />readRecords( Object doc ) : Object<br />....<br /><br /><br />var str=["&lt;?xml version=\"1.0\" encoding=\"utf-8\" ?&gt;",<br />&nbsp;&nbsp;&nbsp; "&lt;dataset&gt;",<br />"&lt;results&gt;2&lt;/results&gt;",<br />"&lt;row&gt;",<br />&nbsp;&nbsp; "&lt;id&gt;1&lt;/id&gt;",<br />&nbsp;&nbsp; "&lt;name&gt;Bill&lt;/name&gt;",<br />&nbsp;&nbsp; "&lt;occupation&gt;Gardener&lt;/occupation&gt;",<br />"&lt;/row&gt;",<br />"&lt;row&gt;",<br />&nbsp;&nbsp; "&lt;id&gt;2&lt;/id&gt;",<br />&nbsp;&nbsp; "&lt;name&gt;Ben&lt;/name&gt;",<br />&nbsp;&nbsp; "&lt;occupation&gt;Horticulturalist&lt;/occupation&gt;",<br />"&lt;/row&gt;",<br />"&lt;/dataset&gt;"].join("");<br /><br />//生成xmldocument对象<br />var xmlDocument;<br />if(Ext.isIE){<br />&nbsp;&nbsp;&nbsp; xmlDocument = new ActiveXObject("Msxml2.FreeThreadedDOMDocument")<br />&nbsp;&nbsp;&nbsp; xmlDocument.async=false;<br />&nbsp;&nbsp;&nbsp; xmlDocument.resolveExternals = false;<br />&nbsp;&nbsp;&nbsp; xmlDocument.loadXML(str) <br />}<br />else{<br />&nbsp;&nbsp; xmlDocument = (new DOMParser()).parseFromString(str, "text/xml");<br />}<br /><br />//然后开始...和其它两个reader一样的用法,只是这儿换了一种写法,recordtype也可以是一个record对象<br />var record = Ext.data.Record.create([<br />&nbsp;&nbsp; {name: 'name', mapping: 'name'},&nbsp;&nbsp;&nbsp;&nbsp; // "mapping" property not needed if it's the same as "name"<br />&nbsp;&nbsp; {name: 'occupation'}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // This field will use "occupation" as the mapping.<br />])<br />var reader = new Ext.data.XmlReader({<br />&nbsp;&nbsp; totalRecords: "results", <br />&nbsp;&nbsp; record: "row",&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //row是节点选择器<br />&nbsp;&nbsp; id: "id"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />}, record);<br />var data=reader.readRecords(xmlDocument);</p></div><img src ="http://www.blogjava.net/liuyz2006/aggbug/384797.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/liuyz2006/" target="_blank">阿者</a> 2012-08-05 11:33 <a href="http://www.blogjava.net/liuyz2006/articles/384797.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ExtJs通过JSON与后台通信</title><link>http://www.blogjava.net/liuyz2006/articles/384780.html</link><dc:creator>阿者</dc:creator><author>阿者</author><pubDate>Sat, 04 Aug 2012 13:55:00 GMT</pubDate><guid>http://www.blogjava.net/liuyz2006/articles/384780.html</guid><wfw:comment>http://www.blogjava.net/liuyz2006/comments/384780.html</wfw:comment><comments>http://www.blogjava.net/liuyz2006/articles/384780.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/liuyz2006/comments/commentRss/384780.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/liuyz2006/services/trackbacks/384780.html</trackback:ping><description><![CDATA[<h1><a href="http://cq-cser.cn/2010/02/extjs%e9%80%9a%e8%bf%87json%e4%b8%8e%e5%90%8e%e5%8f%b0%e9%80%9a%e4%bf%a1/" rel="bookmark">ExtJs通过JSON与后台通信</a></h1>
<p class="date"><strong>Posted on</strong> | 二月 22, 2010 | <a title="ExtJs通过JSON与后台通信 上的评论" href="http://cq-cser.cn/2010/02/extjs%e9%80%9a%e8%bf%87json%e4%b8%8e%e5%90%8e%e5%8f%b0%e9%80%9a%e4%bf%a1/#respond">No Comments</a></p>
<p align="left"><strong>引言</strong></p>
<p>&nbsp;EXT技术对提升用户体验有着先天的优势，很多机构和个人都开始学习EXT技术，截止今天EXT CORE 3.0 也已经发布，EXTJS 3.0 指日可待。虽然性能越来越让人担忧。。。</p>
<p>&nbsp;<span id="more-874"></span></p>
<p align="left">无论用多么惊天地泣鬼神的前台技术，与后台的通信总是必须的。本文就目前手头上有的资料和经验来大概阐述一下EXTJS和后台通信这点事。</p>
<p>&nbsp;</p>
<p align="left">&nbsp;</p>
<p align="left"><strong>为什么要用JSON？</strong></p>
<p>&nbsp;</p>
<p align="left"><strong>&nbsp;</strong>选中JSON不是一拍脑门子的事。EXTJS也不是只支持JSON。目前常用的不外乎下面几种通信方式：</p>
<p>&nbsp;</p>
<p align="left">&nbsp;</p>
<p align="left">1. 动态语言文件周转，如JSP<br />用JSP一类的动态语言文件中转数据无疑是传递数据比较简单的一种,但是不好传递对象。随便举个用Session传递数据的例子。例如：<br />varUserName= &lt;%=session.getAttribute(&#8220;user&#8221;)%&gt;;<br />if(UserName==null){<br />location.href = &#8216;login.jsp&#8217;;<br />}<br />缺点就是不能方便的传递对象。不那么舒服，EXT的不彻底。还在混杂使用JSP这种相比与EXT来说老掉牙的东西。 当然，如果项目条件不允许，或者不需要做成彻底的AJAX OnePage应用。这种方式还是可以解决很多迫在眉睫的问题的。（我是彻底的One Page 狂热者^.^）</p>
<p>&nbsp;</p>
<p align="left">2. JSON<br />JSON是和JavaScript门当户对的数据传输方式，所以用起来会很舒服。而且他可以很方便的传递对象，EXT也对JSON支持的很全面。所有的数据传递需求他都可以胜任。现在第三方的JSON框架也很成熟。</p>
<p>&nbsp;</p>
<p align="left">3. XML<br />EXTJS本身是提供对XML类型数据的解析功能的，和JSON一样。 官方的示例程序也有专门演示XML数据通信的。个人感觉和JSON是同一个级别的，也是比较推荐的方式。</p>
<p>&nbsp;</p>
<p align="left">4. 文本<br />异步调用返回的东西是文本，说白了AJAX就是靠文本传输数据的，无论JSON还是XML，他都是文本。所以文本很牛的。如果弄好了，自己定义一个传输格式也不是不可以。一般不复杂的东西，比如传个标记，传个string什么的。没必要用JSON，用文本就很好用。<br />缺点已经说了，就是无法胜任稍复杂的通信需求。</p>
<p>&nbsp;</p>
<p align="left">所以目前看来就在JSON和XML中选择一个了。XML以后再表，我们现在主要表JSON。</p>
<p>&nbsp;</p>
<p align="left"><strong>通信过程</strong></p>
<p>&nbsp;</p>
<p align="left"><strong>&nbsp;</strong></p>
<p>&nbsp;</p>
<p align="left"><strong>从后台到前台</strong></p>
<p>&nbsp;</p>
<p align="left">看一下通信过程中的图，其中对象我们已经有了，也就是你想要传递的东西。剩下的，就是后台如何把对象转换成JSON，以及前台如何把JSON再解析为对象了。我们先来看后台如何把对象转换成JSON。</p>
<p>&nbsp;</p>
<p align="left">首先要隆重登场的是我自己改写的一个根据LIST生成JSON的类。其实这类简单的要死。所以他只能胜任把LIST转成JSON的工作。而且还有一个局限，至于是什么局限，我们慢慢说。</p>
<p>&nbsp;</p>
<p align="left">先看代码:</p>
<p>&nbsp;</p>
<p align="left">//yueue修改的轻量级JSON类</p>
<p>&nbsp;</p>
<p align="left">package Extest;<br />import java.util.ArrayList;</p>
<p>&nbsp;</p>
<p align="left">&nbsp;</p>
<p align="left">public class Json {</p>
<p>&nbsp;</p>
<p align="left">&nbsp;</p>
<p align="left">public static void main(String[] args) {</p>
<p>&nbsp;</p>
<p align="left">&nbsp;</p>
<p align="left">}</p>
<p>public String singleInfo=&#8221;";<br />public Integer total=0;<br />protected boolean _success=true;<br />protected String _error=&#8221;";<br />protected ArrayList arrData=new ArrayList();<br />protected ArrayList dataItem=new ArrayList();<br />public String getError() {<br />return _error;<br />}<br />public void setError(String error) {<br />if(!error.equals(&#8220;&#8221;))this._success=false;<br />this._error = error;<br />}<br />public boolean getSuccess() {<br />return _success;<br />}<br />public void setSuccess(boolean success) {<br />if(success) this._error=&#8221;";<br />this._success = success;<br />}</p>
<p>public Json()<br />{</p>
<p>}</p>
<p>public void reSet()<br />{<br />arrData.clear();<br />dataItem.clear();<br />}</p>
<p>public void addItem(String name,String _value)<br />{<br />dataItem.add(name);<br />dataItem.add(_value);<br />}</p>
<p>//一个数组添加完毕，一个新的数组开始<br />public void addItemOk()<br />{<br />arrData.add(dataItem);<br />dataItem=new ArrayList();<br />}</p>
<p>public String ToString()<br />{<br />StringBuilder sb=new StringBuilder();<br />sb.append(&#8220;{&#8220;);<br />sb.append(&#8220;\&#8221;total\&#8221;:&#8221;);<br />sb.append(total.toString()+&#8221;,&#8221;);<br />sb.append(&#8220;\&#8221;datas\&#8221;:&#8221;);<br />sb.append(&#8220;[");<br />int ad=arrData.size();<br />for(int i=0;i&lt;ad;i++)<br />{<br />ArrayList arr=(ArrayList)(arrData.get(i));<br />sb.append("{");<br />int t=arr.size();<br />for(int j=0;j&lt;t;j+=2)<br />{<br />if(j==t) break;<br />sb.append("\"");<br />sb.append(arr.get(j).toString());<br />sb.append("\"");<br />sb.append(":");<br />sb.append("\"");<br />sb.append(arr.get(j+1).toString());<br />sb.append("\"");<br />if(j&lt;t-2) sb.append(",");<br />}<br />sb.append("}");<br />if(i&lt;ad-1) sb.append(",");<br />}<br />sb.append("]&#8220;);<br />sb.append(&#8220;}&#8221;);<br />return sb.toString();<br />}</p>
<p>}</p>
<p>&nbsp;</p>
<p align="left">&nbsp;</p>
<p align="left">代码不长。下面我们看看怎么用这个东西把一个LIST转成JSON</p>
<p>&nbsp;</p>
<p align="left">&nbsp;</p>
<p align="left">Json js = new Json();<br />while (rs.next())<br />{<br />js.addItem(&#8220;ID&#8221;, rs.getString(&#8220;ID&#8221;));<br />js.addItem(&#8220;Code&#8221;, rs.getString(&#8220;Sheet_Code&#8221;));<br />js.addItem(&#8220;Consignee&#8221;, rs.getString(&#8220;Sheet_Consignee&#8221;));<br />js.addItem(&#8220;Tone&#8221;, rs.getString(&#8220;Sheet_Tone&#8221;));<br />js.addItem(&#8220;Date&#8221;, rs.getString(&#8220;Sheet_Date&#8221;));<br />js.addItem(&#8220;Cash&#8221;, rs.getString(&#8220;Sheet_Cash&#8221;));<br />js.addItem(&#8220;Station&#8221;, rs.getString(&#8220;Sheet_Station&#8221;));<br />js.addItem(&#8220;Class&#8221;, rs.getString(&#8220;Sheet_Class&#8221;));<br />js.addItemOk();<br />}</p>
<p>&nbsp;</p>
<p align="left">System.out.print(js.outputString());</p>
<p>&nbsp;</p>
<p align="left">&nbsp;</p>
<p align="left">其中rs是一个ResultSet ，里面放的是从数据库里读取的数据。</p>
<p>&nbsp;</p>
<p align="left">其中每次 addItem() 都向JSON提交了一个字段(属性)，当字段提交完毕，执行addItemOk()方法，就会创建条完整的记录(对象) ， 当你循环执行这个流程，就提交了多条记录(对象)，最后的最后， outputString() 方法将你前面提交的所有记录(对象)转化为JSON并打印出来。你可以对比代码看看最后输出来的JSON到底是个什么样子。有助于你理解JSON。</p>
<p>&nbsp;</p>
<p align="left">&nbsp;</p>
<p align="left">上面的这个类看起来似乎不错。实际上这个类几乎没有大的用途。因为他只能处理简单的对象，他遇到任何对象都会调用其toString 方法试图获得代表这个对象的字符串，然后储存并转化。当然，如果是String , Integer , Double ,等类型自然没有问题，因为这些对象可以不失真的转化为String。而遇到一个复杂对象，比如一个由Hibernate生成的对象，他就无能为力了。他不能自动遍历对象下面的所有属性，并一一转换。</p>
<p>&nbsp;</p>
<p align="left">&nbsp;</p>
<p align="left">那么怎么解决呢？ 答案是用强大的第3方类库，比如JSON-Lib 或者 org.json包</p>
<p>&nbsp;</p>
<p align="left">&nbsp;</p>
<p align="left">JSON-lib 是一个封装了常用的JSON业务的第3方类库，很强，很大。</p>
<p>&nbsp;</p>
<p align="left">使用JSON-lib 还需要很多特定版本的包来支持（很烦）。</p>
<p>&nbsp;</p>
<p align="left">具体的安装，还有需要什么支持包，去jsonlib网站上看吧。</p>
<p>&nbsp;</p>
<p align="left">&nbsp;</p>
<p align="left">下面看一个项目中常用的JSON-Lib使用例子。(在ACTION中的代码)</p>
<p>&nbsp;</p>
<p align="left">&nbsp;</p>
<p>&nbsp;</p>
<p align="left">try{<br />PrintWriter out = response.getWriter();<br />UserInfo userInfo = (UserInfo)request.getSession().getAttribute(&#8220;userinfo&#8221;); //从session中得到用户信息对象</p>
<p>String tempStr = &#8220;{\&#8221;Datas\&#8221;:&#8221;+JSONSerializer.toJSON(theList,config).toString()+&#8221;}&#8221;;<br />out.print(tmpStr);<br />return null;<br />}catch(Exception ex){<br />ex.printStackTrace();<br />return null;<br />}</p>
<p>&nbsp;</p>
<p align="left">&nbsp;</p>
<p align="left">很简单，使用JSON-Lib转化的工作就在String tempStr = &#8220;{\&#8221;Datas\&#8221;:&#8221;+JSONSerializer.toJSON(theList,config).toString()+&#8221;}&#8221;;<br />这行搞定了。然后输出就可以了。</p>
<p>&nbsp;</p>
<p align="left">但是，这里有3个问题：</p>
<p>&nbsp;</p>
<p align="left">1. 会有可能出现乱码</p>
<p>&nbsp;</p>
<p align="left">2. 会出现环，比如，对象A中包含B，而对象B中又再次包含A,于是出现了无限循环的环路。这个时候JSON-LIB会报一个net.sf.json.JSONException: There is a cycle in the hierarchy的错误。</p>
<p>&nbsp;</p>
<p align="left">3. 会出现日期问题，因为JAVA中日期属于一个复杂对象，JSON-Lib会把他当做一个复杂对象去解析，得到的结果就不是你要的 2009-01-01 这样的字符串了</p>
<p>&nbsp;</p>
<p align="left">解决方法：</p>
<p>&nbsp;</p>
<p align="left">1. 请参见我的BLOG ： 《Extjs Ajax 乱码问题解决方案》</p>
<p>&nbsp;</p>
<p align="left">2. 请参见我的BLOG： 《json-lib出现There is a cycle in the hierarchy解决办法》</p>
<p>&nbsp;</p>
<p align="left">3. 对JSON-LIB进行设置 config.registerJsonValueProcessor(Date.class,new DateJsonValueProcessor(&#8220;yyyy-MM-dd&#8221;)); //date processor register</p>
<p>&nbsp;</p>
<p align="left">所以，最后，这段转换对象的代码最后变成</p>
<p>&nbsp;</p>
<p align="left">&nbsp;</p>
<p align="left">response.setContentType(&#8220;text/html&#8221;);<br />response.setCharacterEncoding(&#8220;utf-8&#8243;);</p>
<p>&nbsp;</p>
<p align="left">try{<br />PrintWriter out = response.getWriter();<br />UserInfo userInfo = (UserInfo)request.getSession().getAttribute(&#8220;userinfo&#8221;); //从session中得到用户信息对象</p>
<p>&nbsp;</p>
<p align="left">JsonConfig config = new JsonConfig();<br />config.setIgnoreDefaultExcludes(false);<br />config.setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT);<br />config.registerJsonValueProcessor(Date.class,new DateJsonValueProcessor(&#8220;yyyy-MM-dd&#8221;)); //date processor register<br />String tempStr = &#8220;{\&#8221;Datas\&#8221;:&#8221;+JSONSerializer.toJSON(theList,config).toString()+&#8221;}&#8221;;<br />out.print(tmpStr);<br />return null;<br />}catch(Exception ex){<br />ex.printStackTrace();<br />return null;<br />}</p>
<p>&nbsp;</p>
<p align="left">&nbsp;</p>
<p align="left">可以访问一下ACTION或者SERVLET， 看看结果了</p>
<p>&nbsp;</p>
<p align="left">&nbsp;</p>
<p align="left">现在把对象转化为JSON没问题了。剩下的是前台如何把JSON转化成对象了。</p>
<p>&nbsp;</p>
<p align="left">其实这部分工作EXT基本全都做了。EXT主要的数据接收和储存靠Store 。 EXT提供有JSONStroe 用来处理json 。 这部分的工作基本不直接接触JSON ，而是使用EXT。</p>
<p>&nbsp;</p>
<p align="left">如</p>
<p>&nbsp;</p>
<p align="left">//Grid Store from servlet<br />var store = new Ext.data.JsonStore({<br /><a href="http://writeblog.csdn.net/'/ctams/plan/monthTransportPlan.do?method=findMonthTransportPlan'">url:&#8217;/ctams/plan/monthTransportPlan.do?method=findMonthTransportPlan&#8217;</a>,<br />root:&#8217;Datas&#8217;,<br />totalProperty: &#8216;TotalRecords&#8217;,<br />fields:["mtpId",<br />"mtpDate",<br />"mtpAcceptnum",<br />"mtpPlannum",<br />"mtpCarriagenum",<br />"mtpTunnage",<br />"mtpTrainnum",<br />"mtpFormernum",<br />"mtpFormertunnage",<br />"mtpFormertrainnum",<br />"mtpSwapload",<br />"mtpEndharbor",<br />"mtpAlreadyuse",<br />"mtpFlag",<br />"mtpRemark",<br />{name:'mpId',mapping:'monthPlan.mpId'}<br />],<br />baseParams:{<br />planDate:txtSearchText.getValue(),<br />planType:&#8217;42&#8242;,<br />conName:&#8221;<br />}<br />});</p>
<p>&nbsp;</p>
<p align="left">&nbsp;</p>
<p align="left">&nbsp;</p>
<p align="left">&nbsp;</p>
<p><strong>从前台到后台</strong></p>
<p>&nbsp;</p>
<p align="left"><strong>&nbsp;</strong></p>
<p>&nbsp;</p>
<p align="left">目前我接触到系统往前台发送数据主要通过HTTP参数发送。</p>
<p>&nbsp;</p>
<p align="left">更高级一些的就是打包成json，再发回服务器</p><img src ="http://www.blogjava.net/liuyz2006/aggbug/384780.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/liuyz2006/" target="_blank">阿者</a> 2012-08-04 21:55 <a href="http://www.blogjava.net/liuyz2006/articles/384780.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Ext.encode 与 Ext.decode </title><link>http://www.blogjava.net/liuyz2006/articles/384778.html</link><dc:creator>阿者</dc:creator><author>阿者</author><pubDate>Sat, 04 Aug 2012 13:42:00 GMT</pubDate><guid>http://www.blogjava.net/liuyz2006/articles/384778.html</guid><wfw:comment>http://www.blogjava.net/liuyz2006/comments/384778.html</wfw:comment><comments>http://www.blogjava.net/liuyz2006/articles/384778.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/liuyz2006/comments/commentRss/384778.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/liuyz2006/services/trackbacks/384778.html</trackback:ping><description><![CDATA[<div class="blog_title">
<h3><a href="http://njkf-hp.iteye.com/blog/1450404">Ext.encode 与 Ext.decode</a> </h3></div>
<div class="blog_content" id="blog_content">
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Html代码 <a title="复制代码" href="http://njkf-hp.iteye.com/blog/1450404#"></a>&nbsp;<a title="收藏这段代码" href="javascript:void()"></a></div></div>
<ol class="dp-xml"><li><span><strong><font color="#006699"><span class="tag">&lt;</span><span class="tag-name">body</span><span class="tag">&gt;</span></font></strong><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><strong><font color="#006699"><span class="tag">&lt;</span><span class="tag-name">form</span></font></strong><span>&nbsp;</span><span class="attribute"><font color="#ff0000">id</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"form1"</font></span><span>&nbsp;</span><span class="attribute"><font color="#ff0000">runat</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"server"</font></span><span class="tag"><strong><font color="#006699">&gt;</font></strong></span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><strong><font color="#006699"><span class="tag">&lt;</span><span class="tag-name">div</span><span class="tag">&gt;</span></font></strong><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><strong><font color="#006699"><span class="tag">&lt;</span><span class="tag-name">script</span></font></strong><span>&nbsp;</span><span class="attribute"><font color="#ff0000">type</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"text/javascript"</font></span><span class="tag"><strong><font color="#006699">&gt;</font></strong></span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;</span></li><li><span>&nbsp;function&nbsp;ready() &nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//再用一个示例说明下如何使用decode和encode，现在我们已经知道什么是json数据格式了，也知道它的作用和语法了 &nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//现在我们就开始演练吧 &nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//先使用decode方法，这个方法是将json字符串转换成对象的 &nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//第一步：先定义一个json字符串吧 &nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;刘天王&nbsp;=&nbsp;"{姓名:'刘德华',性别:'男',老家:'香港'}"; &nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//第二步：现在我们要把刘天王转换成对象了 &nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;</span><span class="attribute"><font color="#ff0000">who</font></span><span>&nbsp;=&nbsp;</span><span class="attribute-value"><font color="#0000ff">Ext</font></span><span>.decode(刘天王); &nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//第三步：who成了对象后就相当于是类的对象了，里面的姓名，性别，老家都成了who的属性了，现在知道怎么通过对象访问属性了吧 &nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;</span><span class="attribute"><font color="#ff0000">name</font></span><span>&nbsp;=&nbsp;</span><span class="attribute-value"><font color="#0000ff">who</font></span><span>.姓名;&nbsp;&nbsp;&nbsp;&nbsp;//获取who对象的[姓名]属性 &nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;</span><span class="attribute"><font color="#ff0000">sex</font></span><span>&nbsp;=&nbsp;</span><span class="attribute-value"><font color="#0000ff">who</font></span><span>.性别;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//获取who对象的[性别]属性 &nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;</span><span class="attribute"><font color="#ff0000">home</font></span><span>&nbsp;=&nbsp;</span><span class="attribute-value"><font color="#0000ff">who</font></span><span>.老家;&nbsp;&nbsp;&nbsp;&nbsp;//获取who对象的[老家]属性 &nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//第四步：下面将获取的信息组合起来 &nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;</span><span class="attribute"><font color="#ff0000">result</font></span><span>&nbsp;=&nbsp;</span><span class="attribute-value"><font color="#0000ff">"刘天王资料的信息：姓名是--"</font></span><span>+name&nbsp;+&nbsp;"；性别--"+sex+"；老家--"+home; &nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//第五步：我们把获取的who对象的信息用弹出消息的方式显示出来吧 &nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ext.Msg.alert("刘天王的资料信息",result); &nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//以上就是将一个json字符串转换成对象后，再逐个访问对象的属性的示例 &nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//下面使用encode方法 &nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//encode方法很简单了，就是将上面生成的who对象再转换成第一步定义的json字符串 &nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//定义一个到时间执行的函数 &nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;</span><span class="attribute"><font color="#ff0000">getJson</font></span><span>&nbsp;=&nbsp;</span><span class="attribute-value"><font color="#0000ff">function</font></span><span>() &nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//你完全可以把这段写在函数外面，之所以包含在里面纯属是为了在显示第一个消息框后再隔3秒显示下面这个消息窗口 &nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;</span><span class="attribute"><font color="#ff0000">jsonStr</font></span><span>&nbsp;=&nbsp;</span><span class="attribute-value"><font color="#0000ff">Ext</font></span><span>.encode(who); &nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//我们还是通过弹出消息的方式把这个json字符串显示出来吧 &nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ext.Msg.alert("jsonStr信息内容",jsonStr); &nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}; &nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//下面这个方法意思是：在3秒之后会调用函数getJson执行里面包含的脚本 &nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setTimeout(getJson,3000);&nbsp; &nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//补充点东西 &nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Ext.decode()和Ext.encode()分别是是&nbsp;Ext.util.JSON.decode()和Ext.util.JSON.encode的简写 &nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;Ext.onReady(ready); &nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><strong><font color="#006699"><span class="tag">&lt;/</span><span class="tag-name">script</span><span class="tag">&gt;</span></font></strong><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><strong><font color="#006699"><span class="tag">&lt;/</span><span class="tag-name">div</span><span class="tag">&gt;</span></font></strong><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><strong><font color="#006699"><span class="tag">&lt;/</span><span class="tag-name">form</span><span class="tag">&gt;</span></font></strong><span>&nbsp;&nbsp;</span></span></li><li><span></span><strong><font color="#006699"><span class="tag">&lt;/</span><span class="tag-name">body</span><span class="tag">&gt;</span></font></strong><span>&nbsp;&nbsp;</span></span></li></ol></div></div><img src ="http://www.blogjava.net/liuyz2006/aggbug/384778.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/liuyz2006/" target="_blank">阿者</a> 2012-08-04 21:42 <a href="http://www.blogjava.net/liuyz2006/articles/384778.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>extjs 学习网址</title><link>http://www.blogjava.net/liuyz2006/articles/384775.html</link><dc:creator>阿者</dc:creator><author>阿者</author><pubDate>Sat, 04 Aug 2012 13:24:00 GMT</pubDate><guid>http://www.blogjava.net/liuyz2006/articles/384775.html</guid><wfw:comment>http://www.blogjava.net/liuyz2006/comments/384775.html</wfw:comment><comments>http://www.blogjava.net/liuyz2006/articles/384775.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/liuyz2006/comments/commentRss/384775.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/liuyz2006/services/trackbacks/384775.html</trackback:ping><description><![CDATA[<a class="postTitle2" id="cb_post_title_url" href="http://www.cnblogs.com/hannover/archive/2009/09/09/1563671.html">ExtJS实战(6)-extjs+json</a> <br /><a href="http://www.cnblogs.com/hannover/archive/2009/09/09/1563671.html">http://www.cnblogs.com/hannover/archive/2009/09/09/1563671.html</a><img src ="http://www.blogjava.net/liuyz2006/aggbug/384775.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/liuyz2006/" target="_blank">阿者</a> 2012-08-04 21:24 <a href="http://www.blogjava.net/liuyz2006/articles/384775.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ExtJs中decode与encode(转载)  </title><link>http://www.blogjava.net/liuyz2006/articles/384022.html</link><dc:creator>阿者</dc:creator><author>阿者</author><pubDate>Thu, 26 Jul 2012 02:10:00 GMT</pubDate><guid>http://www.blogjava.net/liuyz2006/articles/384022.html</guid><wfw:comment>http://www.blogjava.net/liuyz2006/comments/384022.html</wfw:comment><comments>http://www.blogjava.net/liuyz2006/articles/384022.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/liuyz2006/comments/commentRss/384022.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/liuyz2006/services/trackbacks/384022.html</trackback:ping><description><![CDATA[<div><div> 	      <div> 	      	<div> 		      <h3>ExtJs中decode与encode(转载)&nbsp;&nbsp;</h3> 		      <p clearfix="" nbw-act=""  fc06"="" style="line-height:20px;"> 		        <span> 		           		          2011-05-30 15:28:39|&nbsp;&nbsp;分类： 		          <a m2a"="" href="http://blog.163.com/xiaokangzhijia@126/blog/#m=0&amp;t=1&amp;c=fks_084065080080084066080080086095085080084074081082094070082" title="Extjs">Extjs</a> 		           		        </span> 		        <span fc07=""  ztag"="">|<span fc03"="" id="$_fontswitch">字号</span></span><span pnt=""  fc03"="" id="$_blog_subscribe">&nbsp;<a>订阅</a></span> 		      </p> 		    </div> 	      </div>         </div>                  <div>                  </div>                           <div fc05="" fc11="" nbw-blog="" ztag=""  js-fs2"=""><p><span style="font-size: 8pt;">出自：http://blog.163.com/xiao_mege/blog/static/72942753201102693545195/<br /></span></p><p><span style="font-size: 8pt;">在述说这个例子之前，我假想你已经知道什么是Json数据了，那么在这里在温习一下吧:</span></p> <p><span style="font-size: 10pt;"><span style="font-size: 8pt;">JSON(JavaScript Object Notation)  是一种数据交换格式，采用完全独立于语言的文本格式；<br />JSON建构于两种结构：&#8220;名称/值&#8221;对的集合和值的有序列表</span></span></p><p><span style="font-size: 10pt;"><span style="font-size: 8pt;">下面详细说明下：<br />&#8220;名 称/值&#8221;对的集合（A  collection of name/value   pairs）。不同的语言中，它被理解为对象（object），纪录（record），结构（struct），字典（dictionary），哈希表 （hash  table），有键列表（keyed list），或者关联数组 （associative array）。 <br />值的有序列表（An ordered list  of values）。在大部分语言中，它被理解为数组（array）。 <br />JSON具有以下这些形式：&nbsp;</span></span></p><p><span style="font-size: 10pt;"><span style="font-size: 8pt;">对象是一个无序的&#8220;&#8216;名称/值&#8217;对&#8221;集合。一个对象以&#8220;{&#8221;（左括号）开始，&#8220;}&#8221;（右括号）结束。每个&#8220;名称&#8221;后跟一个&#8220;:&#8221;（冒号）；&#8220;&#8216;名称/值&#8217;  对&#8221;之间使用&#8220;,&#8221;（逗号）分隔。  <br />数组是值（value）的有序集合。一个数组以&#8220;[&#8221;（左中括号）开始，&#8220;]&#8221;（右中括号）结束。值之间使用&#8220;,&#8221;（逗号）分隔。&nbsp;</span></span></p><p><span style="font-size: 10pt;"><span style="font-size: 8pt;">值（value）可以是双引号括起来的字符串（string）、数值(number)、 ture、false、  null、对象（object）或者数组（array）。这些结构可以嵌套。 <br /></span></span></p><p><span style="font-size: 10pt;"><span style="font-size: 8pt;">字符串（string）是由双引号包围的任意数量Unicode字符的集合，使用反斜线转义。一个字符（character）即一个单独的字符串（character  string）。 <br />空白可以加入到任何符号之间</span></span></p> <p><span style="font-size: 10pt;"><span style="font-size: 8pt;">------------------------以下来自百度的最新报告</span></span></p> <p><span style="background-color: yellow; color: red;"><span style="font-size: 8pt;">下面介绍Ext中两个很重要的方法，其实，Ext中没有多余的方法，每个方法都能够恰当好处的发挥它的作用,这里指它很重要，是因为它们太常用了,尤其是在与数据库交换数据的时候</span></span><span style="background-color: yellow; color: red;"><br /></span><span style="font-size: 8pt;">Ext中有两个很重要的方法,一个是decode;一个是encode.顾名思义,一个是编码,一个是解码,你难道真的这么想吗?<br />严格的说,一个是将json字符串转换成对象;一个是将对象转换成json字符串</span></p> <p><span style="font-size: 8pt;">下 面这个示例主要介绍的是Ext.decode()和Ext.encode()的用法，其中使用到了json格式的串，首先是用到了 Ext.decode()方法，将json格式的串转换成对象，然后通过对象访问对象所包含的各个属性的值，通过消息框把它们显示出来；之后在用 Ext.encode()将已经生成的对象转换成开始定义的json格式的串，也通过消息框把它们显示出来，加了一个函数，使得在第一个消息框弹出3秒钟 后再弹出第二个消息框</span></p> <p><span style="background-color: yellow; color: red;"><strong><span style="font-size: 8pt;">用图片说明吧</span></strong></span></p> <p><span style="font-size: 8pt;"> <span style="background-color: yellow; color: red;">//下面是将json字符串转换成对象后,通过对象访问属性生成的消息框</span>  </span></p> <p><span style="font-size: 8pt;"><img alt="Ext中中两个很重要的方法,一个是decode;一个是encode. - xiao_mege - 心在哪里，路就在哪里" src="http://images.cnblogs.com/cnblogs_com/mogen_yin/1001.JPG" ____="ev_4002099011" border="0" height="108" width="345" />  </span></p> <p><span style="font-size: 8pt;"> <span style="background-color: yellow; color: red;">//下面是将上面生成的对象又转换成json字符串后生成的消息框</span>  </span></p> <p><span style="font-size: 8pt;"><img alt="Ext中中两个很重要的方法,一个是decode;一个是encode. - xiao_mege - 心在哪里，路就在哪里" src="http://images.cnblogs.com/cnblogs_com/mogen_yin/1002.JPG" ____="ev_2063520091" border="0" height="110" width="275" /></span></p> <p><span style="background-color: yellow; color: red;"><strong><span style="font-size: 8pt;">具体看下示例吧</span></strong></span></p> <p><span style="font-size: 8pt;">&lt;%@  Page Language="C#"  AutoEventWireup="true"  CodeBehind="testDecode.aspx.cs"   Inherits="Test.Example.hello.testDecode" %&gt;<br />&lt;!DOCTYPE html PUBLIC  "-//W3C//DTD XHTML 1.0 Transitional//EN" "</span><a rel="nofollow" href="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><span style="font-size: 8pt;">http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd</span></a><span style="font-size: 8pt;">"&gt;<br />&lt;html xmlns="</span><a rel="nofollow" href="http://www.w3.org/1999/xhtml"><span style="font-size: 8pt;">http://www.w3.org/1999/xhtml</span></a><span style="font-size: 8pt;">" &gt;<br />&lt;head runat="server"&gt;<br />     &lt;title&gt;测试Ext.decode()和Ext.encode()方法&lt;/title&gt;<br />    &lt;link  rel="Stylesheet" type="text/css"  href="http://www.cnblogs.com/ExtJS/resources/css/ext-all.css" /&gt;<br />     &lt;link rel="Stylesheet" type="text/css"  href="http://www.cnblogs.com/ExtJS/resources/css/xtheme-purple.css" /&gt;<br />     &lt;script type="text/javascript"  src="http://www.cnblogs.com/ExtJS/adapter/ext/ext-base.js"&gt;&lt;/script&gt;<br />     &lt;script type="text/javascript"  src="http://www.cnblogs.com/ExtJS/ext-all.js"&gt;&lt;/script&gt;<br />     &lt;script type="text/javascript"  src="http://www.cnblogs.com/ExtJS/ext-lang-zh_CN.js"&gt;&lt;/script&gt;   <br />&lt;/head&gt;<br />&lt;body&gt;<br />    &lt;form id="form1"  runat="server"&gt;<br />    &lt;div&gt;<br />    &lt;script  type="text/javascript"&gt;</span></p> <p><span style="font-size: 8pt;"> function ready()<br />     {<br />         //再用一个示例说明下如何使用decode和encode，现在我们已经知道什么是json数据格式了，也知道它的作用和语法了<br />         //现在我们就开始演练吧<br />        //先使用decode方法，这个方法是将json字符串转换成对象的<br />        <br />         //第一步：先定义一个json字符串吧<br />        var 刘天王 = "{姓名:'刘德华',性别:'男',老家:'香港'}";<br />         <br />        //第二步：现在我们要把刘天王转换成对象了<br />        var who =  Ext.decode(刘天王);<br />        <br />         //第三步：who成了对象后就相当于是类的对象了，里面的姓名，性别，老家都成了who的属性了，现在知道怎么通过对象访问属性了吧<br />        var  name = who.姓名;    //获取who对象的[姓名]属性<br />        var sex = who.性别;      //获取who对象的[性别]属性<br />        var home = who.老家;    //获取who对象的[老家]属性<br />         <br />        //第四步：下面将获取的信息组合起来<br />        var result = "刘天王资料的信息：姓名是--"+name +  "；性别--"+sex+"；老家--"+home;<br />        <br />         //第五步：我们把获取的who对象的信息用弹出消息的方式显示出来吧<br />         Ext.Msg.alert("刘天王的资料信息",result);<br />        <br />         //以上就是将一个json字符串转换成对象后，再逐个访问对象的属性的示例<br />        <br />         //下面使用encode方法<br />         //encode方法很简单了，就是将上面生成的who对象再转换成第一步定义的json字符串<br />        <br />         //定义一个到时间执行的函数<br />        var getJson = function()<br />        {<br />             //你完全可以把这段写在函数外面，之所以包含在里面纯属是为了在显示第一个消息框后再隔3秒显示下面这个消息窗口<br />             <br />            var jsonStr = Ext.encode(who);<br />            <br />             //我们还是通过弹出消息的方式把这个json字符串显示出来吧<br />             Ext.Msg.alert("jsonStr信息内容",jsonStr);<br />        };<br />        <br />         //下面这个方法意思是：在3秒之后会调用函数getJson执行里面包含的脚本<br />        <br />         setTimeout(getJson,3000); <br />        <br />        //补充点东西<br />        <br />         //Ext.decode()和Ext.encode()分别是是  Ext.util.JSON.decode()和Ext.util.JSON.encode的简写<br />        <br />    }<br />     Ext.onReady(ready);<br />    &lt;/script&gt;<br />    &lt;/div&gt;<br />     &lt;/form&gt;<br />&lt;/body&gt;<br />&lt;/html&gt;<br /></span></p> <p><span style="font-size: 8pt;">现在这个例子就可以说明Ext.decode()和Ext.encode()方法的完美作用了.<br /></span></p> <p><span style="background-color: yellow; color: red;"><strong><span style="font-size: 8pt;">用图片说明吧</span></strong></span></p> <p><span style="font-size: 8pt;"> <span style="background-color: yellow; color: red;">//下面是将json字符串转换成对象后,通过对象访问属性生成的消息框</span>  </span></p> <p><span style="font-size: 8pt;"><img alt="Ext中中两个很重要的方法,一个是decode;一个是encode. - xiao_mege - 心在哪里，路就在哪里" src="http://images.cnblogs.com/cnblogs_com/mogen_yin/1001.JPG" ____="ev_9565953166" border="0" height="108" width="345" />  </span></p> <p><span style="font-size: 8pt;"> <span style="background-color: yellow; color: red;">//下面是将上面生成的对象又转换成json字符串后生成的消息框</span>  </span></p> <p><span style="font-size: 8pt;"><img alt="Ext中中两个很重要的方法,一个是decode;一个是encode. - xiao_mege - 心在哪里，路就在哪里" src="http://images.cnblogs.com/cnblogs_com/mogen_yin/1002.JPG" ____="ev_7050551931" border="0" height="110" width="275" /></span></p><p><br /></p><p><br /></p><p>------------------------------</p><p><div>  <p style="text-align:left;" align="left"><strong><span style="font-size:18.0pt;font-family:宋体;">Ext.encode</span></strong><strong><span style="font-size:18.0pt; font-family:宋体;">与Ext.decode的JSON转换</span></strong></p>  <p style="text-align:left;" align="left"><span style="font-size:12.0pt;font-family:宋体;">14 </span><span style="font-size:12.0pt;font-family:宋体;">五月 2011 | <a href="http://fatkun.com/category/web" title="查看 网页前端 中的全部文章"><span style="color:blue"><span>网页前端</span></span></a> | Tags: <a href="http://fatkun.com/tag/decode"><span style="color:blue">decode</span></a>, <a href="http://fatkun.com/tag/encode"><span style="color:blue">encode</span></a>, <a href="http://fatkun.com/tag/extjs"><span style="color:blue">extjs</span></a></span></p>  <p style="text-align:left;" align="left"><span style="font-size:12.0pt; font-family:宋体;">在Extjs中，我们可以通过json来交换数据，Extjs内置了两个方法来互相转换。</span></p>  <p style="text-align:left;" align="left"><strong><span style="font-size:18.0pt;font-family:宋体;">Ext.decode( String json ) : Object</span></strong></p>  <p style="text-align:left;" align="left"><span style="font-size:12.0pt; font-family:宋体;">把json字符串转换为对象</span></p>  <p style="text-align:left;" align="left"><strong><span style="font-size:18.0pt;font-family:宋体;">Ext.encode( Mixed o ) : String</span></strong></p>  <p style="text-align:left;" align="left"><span style="font-size:12.0pt; font-family:宋体;">把对象转换为字符串，用这个方法可以在ajax提交时返回数据</span></p>  <p style="text-align:left;" align="left"><strong><span style="font-size:12.0pt;font-family:&quot;Courier New&quot;;color:#003366;">var</span></strong><span style="font-size:12.0pt;font-family:&quot;Courier New&quot;;"> arr <span style="color:#339933">=</span> <span style="color:#009900">[]</span><span style="color:#339933">;</span></span></p>  <p style="text-align:left;" align="left"><strong><span style="font-size:12.0pt;font-family:&quot;Courier New&quot;;color:#003366;">var</span></strong><span style="font-size:12.0pt;font-family:&quot;Courier New&quot;;"> field1 <span style="color:#339933">=</span> <span style="color:#009900">{}</span><span style="color:#339933">;</span></span></p>  <p style="text-align:left;" align="left"><span style="font-size:12.0pt;font-family:&quot;Courier New&quot;;">field1<span style="color:#009900">[</span><span style="color:#3366CC">'name'</span><span style="color:#009900">]</span> <span style="color:#339933">=</span> <span style="color:#3366CC">'fatkun'</span><span style="color:#339933">;</span></span></p>  <p style="text-align:left;" align="left"><span style="font-size:12.0pt;font-family:&quot;Courier New&quot;;">field1<span style="color:#009900">[</span><span style="color:#3366CC">'age'</span><span style="color:#009900">]</span> <span style="color:#339933">=</span> <span style="color:#CC0000">23</span><span style="color:#339933">;</span></span></p>  <p style="text-align:left;" align="left"><strong><span style="font-size:12.0pt;font-family:&quot;Courier New&quot;;color:#003366;">var</span></strong><span style="font-size:12.0pt;font-family:&quot;Courier New&quot;;"> field2 <span style="color:#339933">=</span> <span style="color:#009900">{}</span><span style="color:#339933">;</span></span></p>  <p style="text-align:left;" align="left"><span style="font-size:12.0pt;font-family:&quot;Courier New&quot;;">field2<span style="color:#009900">[</span><span style="color:#3366CC">'name'</span><span style="color:#009900">]</span> <span style="color:#339933">=</span> <span style="color:#3366CC">'test'</span><span style="color:#339933">;</span></span></p>  <p style="text-align:left;" align="left"><span style="font-size:12.0pt;font-family:&quot;Courier New&quot;;">field2<span style="color:#009900">[</span><span style="color:#3366CC">'age'</span><span style="color:#009900">]</span> <span style="color:#339933">=</span> <span style="color:#CC0000">24</span><span style="color:#339933">;</span></span></p>  <p style="text-align:left;" align="left"><span style="font-size:12.0pt;font-family:&quot;Courier New&quot;;">arr.<span style="color:#660066">push</span><span style="color:#009900">(</span>field1<span style="color:#009900">)</span><span style="color:#339933">;</span></span></p>  <p style="text-align:left;" align="left"><span style="font-size:12.0pt;font-family:&quot;Courier New&quot;;">arr.<span style="color:#660066">push</span><span style="color:#009900">(</span>field2<span style="color:#009900">)</span><span style="color:#339933">;</span></span></p>  <p style="text-align:left;" align="left"><span style="font-size:12.0pt;font-family:&quot;Courier New&quot;;">Ext.<span style="color:#660066">encode</span><span style="color:#009900">(</span>arr<span style="color:#009900">)</span><span style="color:#339933">;</span></span></p>  <p style="text-align:left;" align="left"><em><span style="font-size:12.0pt;font-family:&quot;Courier New&quot;;color:#006600;">//</span></em><em><span style="font-size:12.0pt;font-family:宋体;Courier New&quot;;Courier New&quot;;color:#006600;">返回结果</span></em><em><span style="font-size:12.0pt; font-family:&quot;Courier New&quot;; color:#006600;">"[{"name":"fatkun","age":23},{"name":"test","age":24}]"</span></em></p>  </div><br /><span style="font-size: 8pt;"></span></p></div></div><img src ="http://www.blogjava.net/liuyz2006/aggbug/384022.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/liuyz2006/" target="_blank">阿者</a> 2012-07-26 10:10 <a href="http://www.blogjava.net/liuyz2006/articles/384022.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>encodeURI()和encodeURIComponent()方法</title><link>http://www.blogjava.net/liuyz2006/articles/384017.html</link><dc:creator>阿者</dc:creator><author>阿者</author><pubDate>Thu, 26 Jul 2012 01:17:00 GMT</pubDate><guid>http://www.blogjava.net/liuyz2006/articles/384017.html</guid><wfw:comment>http://www.blogjava.net/liuyz2006/comments/384017.html</wfw:comment><comments>http://www.blogjava.net/liuyz2006/articles/384017.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/liuyz2006/comments/commentRss/384017.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/liuyz2006/services/trackbacks/384017.html</trackback:ping><description><![CDATA[<div><h2><a href="http://www.itlobo.com/articles/1615.html" rel="bookmark"><span style="font-size: 14pt;"></span></a></h2><p>encodeURI()和encodeURIComponent()方法用于编码传递给浏览器的URI（统一资源标识符）。有效的URI不 能包含某些字符，如空格。这两个方法用于编码URI，这样用专门的UTF-8编码替换所有的非有效字符，就可以使浏览器仍能够接受并理解它们。</p><p>encodeURI() 方法用于处理完整的URI（例如，http://www.itlobo.com/illegal  value.htm），而encodeURIComponent()用于处理URI的一个片断（如前面的URI中的illegal  value.htm）。这两个方法的主要区别是encodeURI()方法不对URI中的特殊字符进行编码，如冒号、前斜杠、问号和英镑符号，而 encodeURIComponent()则对它发现的所有非标准字符进行编码。例如：</p><p>这段代码输出两个值：</p><p>可以看到，除空 格外，第一个URI无任何改变，空格被替换为%20。第二个URI中的所有非字母数字字符都被替换成它们对应的编码，基本上使这个URI变得无用。这就是 encodeURI()可以处理完整URI，而encodeURIComponent()只能处理附加在已有URI末尾的字符串的原因。</p><p>自 然，还有两个方法用于解码编码过的URI，即decodeURI()和decodeURIComponent()。如你所料，这两个方法所做的恰与其对应 的方法相反。decodeURI()方法只对用encodeURI()方法替换的字符解码。例如，％20将被替换为空格，而％23不会被替换，因为它表示 的是英镑符号（#），encodeURI()并不替换这个符号。同样的，decodeURIComponent()会解码所有 encodeURIComponent()编码过的字符，意味着它将对所有的特殊值解码。例如：</p><p>这段代码输出两个值：</p><p>在这个 例子中，变量uri存放的是用encodeURIComponent()编码的字符串。生成的值说明了应用两个解码方法时会发生的事情。第一个值由 decodeURI()输出，把%20替换成空格。第二个值由decodeURIComponent()输出，替换所有的特殊。</p><p>这些URI 方法encodeURI()、encodeURIComponent()、decodeURI()和decodeURICom-  ponent()代替了BOM的escape()和unescape()方法。URI方法更可取，因为它们会对所有Unicode符号编码，而BOM方法 只能对ASCII符号正确编码。尽量避免使用escape()和unescape()方法。</p><p>用AJAX提交数据时：</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 发送端用encodeURIComponent(escape(xxxxxxx))就可以了（其他发送接受代码同上）</p><p>ASP端接收方法：</p><br /><div style="background-color: #f9f7ed; font-family: '[object HTMLOptionElement]', 'Consolas', 'Lucida Console', 'Courier New'; color: #000000;"><span style="color: #000000;">&lt;</span><span style="background-color: #e3d2d2; color: #a61717;">%</span><br /><span style="color: #000000;">Response</span><span style="color: #000000;">.</span><span style="color: #000000;">Charset</span><span style="color: #000000;">=</span><span style="color: #0000ff;">"gb2312"</span><br /><span style="color: #000000;">Response</span><span style="color: #000000;">.</span><span style="color: #000000;">Write</span> <span style="color: #000000;">Unescape</span>(<span style="color: #000000;">Request</span>(<span style="color: #0000ff;">"act"</span>))<br /><span style="background-color: #e3d2d2; color: #a61717;">%</span><span style="color: #000000;">&gt;</span></div></div><img src ="http://www.blogjava.net/liuyz2006/aggbug/384017.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/liuyz2006/" target="_blank">阿者</a> 2012-07-26 09:17 <a href="http://www.blogjava.net/liuyz2006/articles/384017.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ExtAspNet学习-AppBox框架</title><link>http://www.blogjava.net/liuyz2006/articles/381328.html</link><dc:creator>阿者</dc:creator><author>阿者</author><pubDate>Fri, 22 Jun 2012 13:47:00 GMT</pubDate><guid>http://www.blogjava.net/liuyz2006/articles/381328.html</guid><wfw:comment>http://www.blogjava.net/liuyz2006/comments/381328.html</wfw:comment><comments>http://www.blogjava.net/liuyz2006/articles/381328.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/liuyz2006/comments/commentRss/381328.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/liuyz2006/services/trackbacks/381328.html</trackback:ping><description><![CDATA[<a href="http://www.cnblogs.com/rongyi/archive/2012/03/06/2381614.html">http://www.cnblogs.com/rongyi/archive/2012/03/06/2381614.html</a><img src ="http://www.blogjava.net/liuyz2006/aggbug/381328.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/liuyz2006/" target="_blank">阿者</a> 2012-06-22 21:47 <a href="http://www.blogjava.net/liuyz2006/articles/381328.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>