﻿<?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-爪哇一角-文章分类-AJAX + jQuery</title><link>http://www.blogjava.net/ocean07000814/category/40909.html</link><description>共同探讨STRUTS#HIBERNATE#SPRING#EJB等技术</description><language>zh-cn</language><lastBuildDate>Wed, 23 Mar 2016 09:57:45 GMT</lastBuildDate><pubDate>Wed, 23 Mar 2016 09:57:45 GMT</pubDate><ttl>60</ttl><item><title>easyui-progressbar实例！</title><link>http://www.blogjava.net/ocean07000814/articles/429780.html</link><dc:creator>非洲小白脸</dc:creator><author>非洲小白脸</author><pubDate>Wed, 23 Mar 2016 07:05:00 GMT</pubDate><guid>http://www.blogjava.net/ocean07000814/articles/429780.html</guid><wfw:comment>http://www.blogjava.net/ocean07000814/comments/429780.html</wfw:comment><comments>http://www.blogjava.net/ocean07000814/articles/429780.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ocean07000814/comments/commentRss/429780.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ocean07000814/services/trackbacks/429780.html</trackback:ping><description><![CDATA[jsp：&lt;div id="p" class="easyui-progressbar" style="width:400px;"&gt;&lt;/div&gt;<br /><br />js：<br /><div>var timerId;</div><div>// 初始化方法</div><div>function init(){</div><div><span style="white-space:pre">	</span></div><div><span style="white-space:pre">	</span>//每隔0.5秒自动调用方法，实现进度条的实时更新</div><div><span style="white-space:pre">	</span>timerId=window.setInterval(getProgress,500);</div><div><span style="white-space:pre">	</span>$.ajax({</div><div><span style="white-space:pre">	</span> &nbsp; &nbsp;dataType: "json",</div><div><span style="white-space:pre">	</span> &nbsp; &nbsp;method: "post",</div><div><span style="white-space:pre">	</span> &nbsp; &nbsp;url: contextPath+"/XXXX/clearProgress.do"</div><div><span style="white-space:pre">	</span>})</div><div><span style="white-space:pre">	</span>$("#p").show();</div><div><span style="white-space:pre">	</span>$('#p').window({</div><div><span style="white-space:pre">		</span>title:'进度条',</div><div><span style="white-space:pre">		</span>width:420,</div><div><span style="white-space:pre">		</span>height:50,</div><div><span style="white-space:pre">		</span>modal:true,</div><div><span style="white-space:pre">		</span>minimizable:false,</div><div><span style="white-space:pre">		</span>maximizable: false,</div><div><span style="white-space:pre">		</span>closed: false,</div><div><span style="white-space:pre">		</span>collapsible:false</div><div><span style="white-space:pre">	</span>});</div><div>};</div><div>function getProgress()</div><div>{</div><div><span style="white-space:pre">	</span></div><div><span style="white-space:pre">	</span>$.ajax({</div><div><span style="white-space:pre">	</span> &nbsp; &nbsp;dataType: "json",</div><div><span style="white-space:pre">	</span> &nbsp; &nbsp;method: "post",</div><div><span style="white-space:pre">	</span> &nbsp; &nbsp;url: contextPath+"/XXX/getProgress.do"</div><div><span style="white-space:pre">	</span>}).done(function(data){</div><div><span style="white-space:pre">		</span>if(data.processInt&gt;=100){</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; window.clearInterval(timerId);</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $('#p').window('close');</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;$('#p').progressbar('setValue',data.processInt);</div><div>&nbsp; &nbsp; }).fail(function(){</div><div>&nbsp; &nbsp; <span style="white-space:pre">	</span>$.messager.alert('告警',"本次操作失败，请重新操作",'error');</div><div><span style="white-space:pre">		</span>return false;</div><div>&nbsp; &nbsp; });</div><div>}</div><br />java：<br /><div>int processInt = 0;</div><div>&nbsp; &nbsp; /**</div><div>&nbsp; &nbsp; &nbsp;*&nbsp;</div><div>&nbsp; &nbsp; &nbsp;* ??</div><div>&nbsp; &nbsp; &nbsp;* @author&nbsp;</div><div>&nbsp; &nbsp; &nbsp;* @param&nbsp;</div><div>&nbsp; &nbsp; &nbsp;* @param&nbsp;</div><div>&nbsp; &nbsp; &nbsp;* @return</div><div>&nbsp; &nbsp; &nbsp;* @see [类、类#方法、类#成员]</div><div>&nbsp; &nbsp; &nbsp;*/</div><div>&nbsp; &nbsp; @RequestMapping(value = "/clearProgress", method = RequestMethod.POST)</div><div>&nbsp; &nbsp; public @ResponseBody void clearProgress()</div><div>&nbsp; &nbsp; {</div><div>&nbsp; &nbsp; &nbsp; &nbsp; processInt = 0;</div><div>&nbsp; &nbsp; }</div><div>&nbsp; &nbsp; /**</div><div>&nbsp; &nbsp; &nbsp;*&nbsp;</div><div>&nbsp; &nbsp; &nbsp;* ??</div><div>&nbsp; &nbsp; &nbsp;* @author&nbsp;</div><div>&nbsp; &nbsp; &nbsp;* @param&nbsp;</div><div>&nbsp; &nbsp; &nbsp;* @param&nbsp;</div><div>&nbsp; &nbsp; &nbsp;* @return</div><div>&nbsp; &nbsp; &nbsp;* @see [类、类#方法、类#成员]</div><div>&nbsp; &nbsp; &nbsp;*/</div><div>&nbsp; &nbsp; @RequestMapping(value = "/getProgress", method = RequestMethod.POST)</div><div>&nbsp; &nbsp; public @ResponseBody Map&lt;String, Object&gt; getProgress()</div><div>&nbsp; &nbsp; {</div><div>&nbsp; &nbsp; &nbsp; &nbsp; Map&lt;String, Object&gt; map = new HashMap&lt;String, Object&gt;();</div><div>&nbsp; &nbsp; &nbsp; &nbsp; try</div><div>&nbsp; &nbsp; &nbsp; &nbsp; {</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Random random=new Random();</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; processInt += random.nextInt(10);</div><div>&nbsp; &nbsp; &nbsp; &nbsp; }</div><div>&nbsp; &nbsp; &nbsp; &nbsp; catch (Exception e)</div><div>&nbsp; &nbsp; &nbsp; &nbsp; {</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; log.error("Exception:", e);</div><div>&nbsp; &nbsp; &nbsp; &nbsp; }</div><div>&nbsp; &nbsp; &nbsp; &nbsp; map.put("processInt", processInt);</div><div>&nbsp; &nbsp; &nbsp; &nbsp; return map;</div><div>&nbsp; &nbsp; }<br /><br />实际项目中，只要将后台处理的过程的进度实时传递给公共变量processInt 即可。</div><img src ="http://www.blogjava.net/ocean07000814/aggbug/429780.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ocean07000814/" target="_blank">非洲小白脸</a> 2016-03-23 15:05 <a href="http://www.blogjava.net/ocean07000814/articles/429780.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>dwr动态加载下拉框</title><link>http://www.blogjava.net/ocean07000814/articles/352886.html</link><dc:creator>非洲小白脸</dc:creator><author>非洲小白脸</author><pubDate>Thu, 23 Jun 2011 09:36:00 GMT</pubDate><guid>http://www.blogjava.net/ocean07000814/articles/352886.html</guid><wfw:comment>http://www.blogjava.net/ocean07000814/comments/352886.html</wfw:comment><comments>http://www.blogjava.net/ocean07000814/articles/352886.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ocean07000814/comments/commentRss/352886.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ocean07000814/services/trackbacks/352886.html</trackback:ping><description><![CDATA[<p>java文件中增加下列：<br />public String method(String id){<br />&nbsp;&nbsp;XXXLogic logic = new XXXLogic ();<br />&nbsp;&nbsp;try {<br />&nbsp;&nbsp;&nbsp;XXList list = logic.getList(id);<br />&nbsp;&nbsp;&nbsp;return list.toJSONString();&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;} catch (Exception e) {<br />&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />&nbsp;&nbsp;}<br />&nbsp;&nbsp;return null;<br />&nbsp;}</p>
<p>&nbsp;<br />在jsp页面中适当地方，通过dwr调用后天java文件，并对返回json对象做适当处理即可。</p>
<p>XXXXListener.method(result.id+ "",{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;callback : function(data) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (data) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var json = window.eval(data);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DWRUtil.removeAllOptions(下拉框的对象);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;json.splice(0,0,{departmentid:'',departmentname:'-------请选择------'});<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DWRUtil.addOptions('dept2',json,'departmentid','departmentname');<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;});</p><img src ="http://www.blogjava.net/ocean07000814/aggbug/352886.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ocean07000814/" target="_blank">非洲小白脸</a> 2011-06-23 17:36 <a href="http://www.blogjava.net/ocean07000814/articles/352886.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>dwr框架(菜鸟入门) 转载</title><link>http://www.blogjava.net/ocean07000814/articles/311810.html</link><dc:creator>非洲小白脸</dc:creator><author>非洲小白脸</author><pubDate>Wed, 03 Feb 2010 07:21:00 GMT</pubDate><guid>http://www.blogjava.net/ocean07000814/articles/311810.html</guid><wfw:comment>http://www.blogjava.net/ocean07000814/comments/311810.html</wfw:comment><comments>http://www.blogjava.net/ocean07000814/articles/311810.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ocean07000814/comments/commentRss/311810.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ocean07000814/services/trackbacks/311810.html</trackback:ping><description><![CDATA[DWR（Direct Web
Remoting）是一个开源的类库,可以帮助开发人员开发包含AJAX技术的网站.它可以允许在浏览器里的代码使用运行在WEB服务器上的JAVA函数,就像它就在浏览器里一样.<br />
&nbsp;
<p><wbr>
DWR采取了一个类似AJAX的新方法来动态生成基于JAVA类的JavaScript代码.这样WEB开发人员就可以在JavaScript里使用Java代码就像它们是浏览器的本地代码(客户端代码)一样;但是Java代码运行在WEB服务器端而且可以自由访问WEB
服务器的资源.出于安全的理由,WEB开发者必须适当地配置哪些Java类可以安全的被外部使用.</p>
<p>要使用dwr要先下载<a href="http://getahead.org/dwr/">http://getahead.org/dwr/</a><br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 下载内容<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>
DownloadVersion 2.0.3Size<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> JAR File:
dwr.jar(489Kb)<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> WAR
File:dwr.war(2.14Mb)<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>
Sources:dwr-2.0.3-src.zip (20.78Mb)</p>
<p>&nbsp;<wbr> 首先看下工程里面:</p>
<p><a href="http://photo.blog.sina.com.cn/showpic.html#blogid=5a39b0c70100bgdh&amp;url=http://static1.photo.sina.com.cn/orignal/5a39b0c745afa751edce0" target="_blank"><img src="http://static1.photo.sina.com.cn/bmiddle/5a39b0c745afa751edce0" alt="" /></a></p>
<p>&nbsp;<wbr> 多了dwr.jar(dwr
jar包),dwr.xml(dwr的配置文件),dwr20.dtd(在编辑xml配置文件时，提供自动提示功能)，其实web.xml配置文件也配置了dwr的servlet，来看下：</p>
<p><a href="http://photo.blog.sina.com.cn/showpic.html#blogid=5a39b0c70100bgdh&amp;url=http://static14.photo.sina.com.cn/orignal/5a39b0c706f7f73c7622d" target="_blank"><img style="width: 587px; height: 121px;" src="http://static14.photo.sina.com.cn/bmiddle/5a39b0c706f7f73c7622d" alt="" width="566" height="117" /></a></p>
<p>&nbsp;<wbr>
至于这个url为什么还要用"/dwr/*"还不是很清楚，我想的是如果客户端有请求过来经过dwr的都被指定的servler处理（个人理解）。</p>
<p>&nbsp;<wbr> 在来看下dwr.xml的配置：</p>
<p><a href="http://photo.blog.sina.com.cn/showpic.html#blogid=5a39b0c70100bgdh&amp;url=http://static8.photo.sina.com.cn/orignal/5a39b0c745afa9aa7c017" target="_blank"><img src="http://static8.photo.sina.com.cn/bmiddle/5a39b0c745afa9aa7c017" alt="" /></a></p>
<p>&nbsp;<wbr>
红线框的是关于dwr智能提示的配置，里面蓝线框的是上面提到的dwr20.dtd的路径，如果路径或者文件名不对，那么前面就会出现警告：</p>
<p><a href="http://photo.blog.sina.com.cn/showpic.html#blogid=5a39b0c70100bgdh&amp;url=http://static8.photo.sina.com.cn/orignal/5a39b0c745afaaa4f8ed7" target="_blank"><img src="http://static8.photo.sina.com.cn/bmiddle/5a39b0c745afaaa4f8ed7" alt="" /></a></p>
<p>
&nbsp;<wbr>如果出错了也无所谓，只不过是不能智能提示，如果你能把这写节点记住的话，那就不需要了，否则就把dwr20.dtd拷贝到与dwr.xml相同的目录下。</p>
<p>&nbsp;<wbr> 在看重要的部分dwr的节点：</p>
<p>
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr><font color="#0000ff">&lt;allow&gt;标签中包括可以暴露给javascript访问的东西。</font></p>
<p><font color="#0000ff">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr><font color="#000000"><font color="#0000ff">&lt;create&gt;标签中指定javascript中可以访问的java类</font>，
并定义DWR应当如何获得要进行远程的类的实例。creator="new"属性指定java类实例的生成方式，new意味着DWR应当调用类的默认构造
函数来获得实例，其他的还有spring方式，通过与IOC容器Spring进行集成来获得实例等等。javascript="sayHello"属性指
定javascript代码访问对象时使用的名称。</font></font></p>
<p>
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr><font color="#0000ff">&lt;param&gt;</font><font color="#000000">name这里一般用class指一个类，value指类的全名，包括包名。</font></p>
<p>&nbsp;<wbr> 好了配置文件我们算做好了，在来看看jsp中在JavaScript中所做的配置。</p>
<p><a href="http://photo.blog.sina.com.cn/showpic.html#blogid=5a39b0c70100bgdh&amp;url=http://static6.photo.sina.com.cn/orignal/5a39b0c745afae100f2e5" target="_blank"><img src="http://static6.photo.sina.com.cn/bmiddle/5a39b0c745afae100f2e5" alt="" /></a></p>
<p>&nbsp;<wbr> 第一个是dwr的引擎js文件，第二个是用户自己要访问java的类的js文件。</p>
<p>在来看看JavaScript调用java类的方法</p>
<p><a href="http://photo.blog.sina.com.cn/showpic.html#blogid=5a39b0c70100bgdh&amp;url=http://static1.photo.sina.com.cn/orignal/5a39b0c745afaed9a6f20" target="_blank"><img src="http://static1.photo.sina.com.cn/bmiddle/5a39b0c745afaed9a6f20" alt="" /></a></p>
<p>&nbsp;<wbr> 注意这里的<font color="#ff0000">sayHell</font>o还有上面配置的<font color="#ff0000">sayHello</font>.js（文件名）要和dwr.xml中配置<font color="#ff0000">JavaScript的名字要相同</font>，否则就报错。</p>
<p>下来看下java类中的方法。</p>
<p><a href="http://photo.blog.sina.com.cn/showpic.html#blogid=5a39b0c70100bgdh&amp;url=http://static6.photo.sina.com.cn/orignal/5a39b0c745afafee0cfa5" target="_blank"><img src="http://static6.photo.sina.com.cn/bmiddle/5a39b0c745afafee0cfa5" alt="" /></a></p>
<p>&nbsp;<wbr></p>
<p>&nbsp;<wbr>
在上面的JavaScript中有人就想问，为什么调用Hello的方法时要传入一个函数。来说下，第一个是java方法的参数，第二个方法是回调函数，这个函数是负责接受JavaScript调用java类后返回的结果。</p>
<p>&nbsp;<wbr>
到这里一个简单的dwr框架就搞完了，来先看下是否成功，启动jsp的服务器，然后下图：</p>
<p><a href="http://photo.blog.sina.com.cn/showpic.html#blogid=5a39b0c70100bgdh&amp;url=http://static11.photo.sina.com.cn/orignal/5a39b0c706f7f81e30a7a" target="_blank"><img src="http://static11.photo.sina.com.cn/bmiddle/5a39b0c706f7f81e30a7a" alt="" /></a></p>
<p>&nbsp;<wbr>
点击查看文件，先把里面所有的东西删除了，然后浏览你的jsp页面，就出出现一下2个文件</p>
<p><a href="http://photo.blog.sina.com.cn/showpic.html#blogid=5a39b0c70100bgdh&amp;url=http://static11.photo.sina.com.cn/orignal/5a39b0c745afb1ad6b19a" target="_blank"><img src="http://static11.photo.sina.com.cn/bmiddle/5a39b0c745afb1ad6b19a" alt="" /></a></p>
<p>&nbsp;<wbr>
就是我们刚才配置的两个js文件，如果客户端通过JavaScript调用sayHello.Hello的话，那么就会由sayHello.js处理，然后转交给engine引擎，之后由引擎向服务器请求。</p>
<p>&nbsp;<wbr>来看下效果，</p>
<p><a href="http://photo.blog.sina.com.cn/showpic.html#blogid=5a39b0c70100bgdh&amp;url=http://static12.photo.sina.com.cn/orignal/5a39b0c745afb24869bdb" target="_blank"><img src="http://static12.photo.sina.com.cn/bmiddle/5a39b0c745afb24869bdb" alt="" /></a></p>
<p>&nbsp;<wbr>
很好，看来运行很好，但是发现个问题，我刚才在配置文件里配置的com.dwr.sayHello中所有的方法我们都可以访问的嘛？其实并不是这样的，要是不设置的话，就默认允许调用所有的方法，要是想要指定的方法允许访问，那么就要在dwr.xml中配置了。来看：</p>
<p><a href="http://photo.blog.sina.com.cn/showpic.html#blogid=5a39b0c70100bgdh&amp;url=http://static15.photo.sina.com.cn/orignal/5a39b0c745afb36d6d7ae" target="_blank"><img src="http://static15.photo.sina.com.cn/bmiddle/5a39b0c745afb36d6d7ae" alt="" /></a></p>
&nbsp;
<p><wbr> 好了，具体配置就是这样的。</p>
<img src ="http://www.blogjava.net/ocean07000814/aggbug/311810.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ocean07000814/" target="_blank">非洲小白脸</a> 2010-02-03 15:21 <a href="http://www.blogjava.net/ocean07000814/articles/311810.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>AJAX JQuery</title><link>http://www.blogjava.net/ocean07000814/articles/290492.html</link><dc:creator>非洲小白脸</dc:creator><author>非洲小白脸</author><pubDate>Mon, 10 Aug 2009 02:18:00 GMT</pubDate><guid>http://www.blogjava.net/ocean07000814/articles/290492.html</guid><wfw:comment>http://www.blogjava.net/ocean07000814/comments/290492.html</wfw:comment><comments>http://www.blogjava.net/ocean07000814/articles/290492.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ocean07000814/comments/commentRss/290492.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ocean07000814/services/trackbacks/290492.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Normal002falsefalsefalseMicrosoftInternetExplorer4/* Style Definitions */table.MsoNormalTable{mso-style-name:標準の表;mso-tstyle-rowba...&nbsp;&nbsp;<a href='http://www.blogjava.net/ocean07000814/articles/290492.html'>阅读全文</a><img src ="http://www.blogjava.net/ocean07000814/aggbug/290492.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ocean07000814/" target="_blank">非洲小白脸</a> 2009-08-10 10:18 <a href="http://www.blogjava.net/ocean07000814/articles/290492.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jQuery中对html对象的操作</title><link>http://www.blogjava.net/ocean07000814/articles/289926.html</link><dc:creator>非洲小白脸</dc:creator><author>非洲小白脸</author><pubDate>Wed, 05 Aug 2009 04:36:00 GMT</pubDate><guid>http://www.blogjava.net/ocean07000814/articles/289926.html</guid><wfw:comment>http://www.blogjava.net/ocean07000814/comments/289926.html</wfw:comment><comments>http://www.blogjava.net/ocean07000814/articles/289926.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ocean07000814/comments/commentRss/289926.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ocean07000814/services/trackbacks/289926.html</trackback:ping><description><![CDATA[jQuery（javascript）中对html对象的操作：<br />
<br />
$("input[@name=prj]").val()：取得input标签下面的属性等于prj的对象的值。<br />
&lt;html:text name="Form" property="prj"/&gt;<br />
<br />
&nbsp;$("select[@name=sub]").val():取得select标签下面的属性等于sub的对象的值。<br />
&lt;html:select name="Form" property="sub" /&gt;<br />
<br />
$('#proId').attr("value", value1)：JSP中ID为proId的对象，将它的值赋为value1。<br />
$('#proId').attr("disabled", "true")：设置为不能编辑。<br />
$('#proId').removeAttr("disabled")：设置为可编辑。<br />
<br />
<br />
jQuery中$('#proId') 等同于 javascript中document.getElementById("proId");<br />
<br />
<img src ="http://www.blogjava.net/ocean07000814/aggbug/289926.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ocean07000814/" target="_blank">非洲小白脸</a> 2009-08-05 12:36 <a href="http://www.blogjava.net/ocean07000814/articles/289926.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jQuery介绍（自我学习）</title><link>http://www.blogjava.net/ocean07000814/articles/289819.html</link><dc:creator>非洲小白脸</dc:creator><author>非洲小白脸</author><pubDate>Tue, 04 Aug 2009 09:48:00 GMT</pubDate><guid>http://www.blogjava.net/ocean07000814/articles/289819.html</guid><wfw:comment>http://www.blogjava.net/ocean07000814/comments/289819.html</wfw:comment><comments>http://www.blogjava.net/ocean07000814/articles/289819.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/ocean07000814/comments/commentRss/289819.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ocean07000814/services/trackbacks/289819.html</trackback:ping><description><![CDATA[<div style="float: right; visibility: visible;" class="text_pic"><a href="http://imgsrc.baidu.com/baike/pic/item/32bb9c8bf078eec0fd1f10de.jpg" target="_blank"><img class="editorImg" title="" src="http://imgsrc.baidu.com/baike/abpic/item/32bb9c8bf078eec0fd1f10de.jpg"  alt="" /></a></div>
jQuery由美国人John Resig创建，至今已吸引了来自世界各地的众多javascript高手加入其team，包括来自德国的J&amp;ouml;rn <em>Zaefferer</em>，罗马尼亚的Stefan Petre等等。<br />
jQuery是继prototype之后又一个优秀的Javascrīpt框架。其宗旨是——WRITE LESS,DO MORE,写更少的代码,做更多的事情。<br />
它是轻量级的js库(压缩后只有21k) ，这是其它的js库所不及的，它兼容CSS3，还兼容各种浏览器 （IE 6.0+, FF 1.5+, Safari 2.0+, Opera 9.0+）。<br />
jQuery是一个快速的，简洁的javaScript库，使用户能更方便地处理HTML documents、events、实现动画效果，并且方便地为网站提供AJAX交互。<br />
jQuery还有一个比较大的优势是，它的文档说明很全，而且各种应用也说得很详细，同时还有许多成熟的插件可供选择。<br />
jQuery能够使用户的html页保持代码和html内容分离，也就是说，不用再在html里面插入一堆js来调用命令了，只需定义id即可。<br />
Jquery是继prototype之后又一个优秀的Javascrīpt框架。对
prototype我使用不多，简单了解过。但使用上jquery之后，马上被她的优雅吸引住了。有人使用这样的一比喻来比较prototype和
jquery：prototype就像Java，而jquery就像ruby.实际上我比较喜欢java（少接触Ruby
罢了）但是jquery的简单的实用的确有相当大的吸引力啊！在项目里我把jquery作为自己唯一的框架类包。使用其间也有一点点心得，其实这些心得，
在jquery的文档上面也可能有讲，不过还是记下来，以备忘罢。
<h2 class="first">
<div class="text_edit">[<a onclick="userLogin(3,0);Detect.url='http://baike.baidu.com/edit/id=1020297&amp;dl=1';Detect.id=1020297;return false;" href="http://baike.baidu.com/view/1020297.htm#">编辑本段</a>]</div>
<a style="width: 20px; height: 20px; text-indent: 20px; background-repeat: no-repeat; background-image: url(/CuteSoft_Client/CuteEditor/Load.ashx?type=image&amp;file=anchor.gif);" name="1"></a>一，找到你了！</h2>
还记得$()这个东西吧？无论prototype还是DWR都使用了这个函数代替document.getElementById()。没错，jquery也跟风了。为达到document.getElementById()的目的，jquery是这样写的： <br />
代码 <br />
var someElement = $("#myId"); <br />
看起来比其他两个框架的要多了一个#，好，看看下面的用法： <br />
代码 <br />
$("div p"); // (1) <br />
$("div.container"); // (2) <br />
$("div #msg"); // (3) <br />
$("table a",context); // (4) <br />
在prototype里看过这样的写法吗？第一行代码得到所有标签下的P元素。第二行代码得到class 为container的元素,第三行代码得到标签下面id为msg的元素。第四行代码得到context为上下文的table里面所有的连接元素。 <br />
如果你熟悉CSS，你会觉得这些写法很眼熟！对了。正是。看出奥妙了吧。jquery就是通过这样的方式来找到Dom对象里面的元素。跟CSS的选择器相类似。
<h2 class="">
<div class="text_edit">[<a onclick="userLogin(3,0);Detect.url='http://baike.baidu.com/edit/id=1020297&amp;dl=2';Detect.id=1020297;return false;" href="http://baike.baidu.com/view/1020297.htm#">编辑本段</a>]</div>
<a style="width: 20px; height: 20px; text-indent: 20px; background-repeat: no-repeat; background-image: url(/CuteSoft_Client/CuteEditor/Load.ashx?type=image&amp;file=anchor.gif);" name="2"></a>二，Jquery对象？</h2>
jquery提供了很多便利的函数，如each(fn)，但是使用这些函数的前提是：你使用的对象是Jquery对象。使一个Dom对象成为一个Jquery对象很简单，通过下面一些方式（只是一部分）： <br />
代码 <br />
var a = $("#cid"); <br />
var b = $("hello");<br />
var c = document.createElement("table"); <br />
var tb = $&amp;copy;;
<h2 class="">
<div class="text_edit">[<a onclick="userLogin(3,0);Detect.url='http://baike.baidu.com/edit/id=1020297&amp;dl=3';Detect.id=1020297;return false;" href="http://baike.baidu.com/view/1020297.htm#">编辑本段</a>]</div>
<a style="width: 20px; height: 20px; text-indent: 20px; background-repeat: no-repeat; background-image: url(/CuteSoft_Client/CuteEditor/Load.ashx?type=image&amp;file=anchor.gif);" name="3"></a>三，代替body标签的onload</h2>
这个惯例，也许是除了$()之外，用得最多的地方了。下面一段代码： <br />
代码 <br />
$(document).ready(function(){ <br />
alert("hello"); <br />
});(1) <br />
&lt;body onload="alert('hello');"&gt;（2） <br />
上面两段代码是等价的。但代码1的好处是做到表现和逻辑分离。并且可以在不同的js文件中做相
同的操作，即$(document).ready
(fn)可以在一个页面中重复出现，而不会冲突。基本上Jqeury的很多plugin都是利用这个特性，正因为这个特性，多个plugin共同使用起
来，在初始化时不会发生冲突。 <br />
不管怎么说，这个惯例可以分离javascrīpt与HTML。推荐使用。
<h2 class="">
<div class="text_edit">[<a onclick="userLogin(3,0);Detect.url='http://baike.baidu.com/edit/id=1020297&amp;dl=4';Detect.id=1020297;return false;" href="http://baike.baidu.com/view/1020297.htm#">编辑本段</a>]</div>
<a style="width: 20px; height: 20px; text-indent: 20px; background-repeat: no-repeat; background-image: url(/CuteSoft_Client/CuteEditor/Load.ashx?type=image&amp;file=anchor.gif);" name="4"></a>四，事件机制</h2>
我大量使用的事件可能就是button的onclick了。以前习惯在input 元素上写onclick =
"fn()",使用jquery可以使javascrīpt代码与html代码分离，保持HTML的清洁，还可以很轻松地绑定事件，甚至你可以不知道&#8220;事
件&#8221;这个名词。 <br />
代码 <br />
$(document).ready(function(){ <br />
$("#clear").click(function(){ <br />
alert("i am about to clear the table"); <br />
}); <br />
$("form[0]").submit(validate); <br />
}); <br />
function validate(){ <br />
//do some form validation <br />
}
<h2 class="">
<div class="text_edit">[<a onclick="userLogin(3,0);Detect.url='http://baike.baidu.com/edit/id=1020297&amp;dl=5';Detect.id=1020297;return false;" href="http://baike.baidu.com/view/1020297.htm#">编辑本段</a>]</div>
<a style="width: 20px; height: 20px; text-indent: 20px; background-repeat: no-repeat; background-image: url(/CuteSoft_Client/CuteEditor/Load.ashx?type=image&amp;file=anchor.gif);" name="5"></a>五，同一函数实现set</h2>
代码 <br />
$("#msg").html(); <br />
$("#msg").html("hello"); <br />
上面两行代码，调用了同样的函数。但结果却差别很大。 <br />
第一行是返回指定元素的HTML值，第二行则是将hello这串字符设置到指定元素中。jquery的函数大部分有这样的特性。
<h2 class="">
<div class="text_edit">[<a onclick="userLogin(3,0);Detect.url='http://baike.baidu.com/edit/id=1020297&amp;dl=6';Detect.id=1020297;return false;" href="http://baike.baidu.com/view/1020297.htm#">编辑本段</a>]</div>
<a style="width: 20px; height: 20px; text-indent: 20px; background-repeat: no-repeat; background-image: url(/CuteSoft_Client/CuteEditor/Load.ashx?type=image&amp;file=anchor.gif);" name="6"></a>六，ajax</h2>
这是一个ajax横行的时代。多少人，了不了解ajax的都跟着用上一把。呵。使用jquery实现ajax同样简单异常 <br />
代码 <br />
$.get("search.do",{id:1},rend); <br />
function rend(xml){ <br />
alert(xml); <br />
} (1) <br />
$.post("search.do",{id:1},rend); <br />
function rend(xml){ <br />
alert(xml); <br />
} (2) <br />
$("#msg").ajaxStart(function(){ <br />
this.html("正在加载。。。。"); <br />
});(3) <br />
$("#msg").ajaxSuccess(function(){ <br />
this.html("加载完成！"); <br />
});(4) <br />
这些都是较常用的方法，get和post用法一样。第一个参数是异步请求的url，第二个为参数，第三个回调方法。 <br />
3，4的方法会在指定的Dom对象上绑定响应ajax执行的事件。当然，jquery的AJAX相关的函数不仅是这些，有兴趣可以去研究再多。
<h2 class="">
<div class="text_edit">[<a onclick="userLogin(3,0);Detect.url='http://baike.baidu.com/edit/id=1020297&amp;dl=7';Detect.id=1020297;return false;" href="http://baike.baidu.com/view/1020297.htm#">编辑本段</a>]</div>
<a style="width: 20px; height: 20px; text-indent: 20px; background-repeat: no-repeat; background-image: url(/CuteSoft_Client/CuteEditor/Load.ashx?type=image&amp;file=anchor.gif);" name="7"></a>七，渐入淡出</h2>
代码 <br />
$("#msg").show("fast"); <br />
$("#msg").hide("slow"); <br />
没错，上面两行代码已经分别实现了一个id为Msg的jquery对象的渐入和淡出。做一个像Gmail一样的动态加载通知条，用jquery就那么简单。两个函数接受的参数除了快慢等，还可以接收整型，作为渐入或淡出的完成时间，单位为MS。
<h2 class="">
<div class="text_edit">[<a onclick="userLogin(3,0);Detect.url='http://baike.baidu.com/edit/id=1020297&amp;dl=8';Detect.id=1020297;return false;" href="http://baike.baidu.com/view/1020297.htm#">编辑本段</a>]</div>
<a style="width: 20px; height: 20px; text-indent: 20px; background-repeat: no-repeat; background-image: url(/CuteSoft_Client/CuteEditor/Load.ashx?type=image&amp;file=anchor.gif);" name="8"></a>八，plugin</h2>
这也是一个插件的时代。 <br />
jquery插件给我的感觉清一色的清洁，简单。如Jtip，要使用它的功能，只需要在你的元素的class上加上Jtip,并引入jtip.js及其样式即可以了。其他事情插件全包。我喜欢jquery的一个重要原因是发现她已经有了很多很好，很精彩的插件。 <br />
写得很烂。可能大家看不出jquery的好处。嗯，光听是没用的，试用一下吧。你会发觉很有趣。 <br />
暂时告一段落吧。待有新的发现再来分享。 <br />
加一些Jquery的资源： <br />
http://www.visualjquery.com/index.xml 很好的API查询站点 <br />
http://jquery.com/demo/thickbox/ 知道lightBox吧，看看Jquery是怎样实现相同的东西 <br />
http://jquery.org.cn/visual/cn/index.xml //不错的JQUERY 中文学习 推荐 <br />
jquery来源 <br />
jQuery由美国人John Resig创建，至今已吸引了来自世界各地的众多javascript高手加入其team，包括来自德国的J&amp;ouml;rn Zaefferer，罗马尼亚的Stefan Petre等等。 <br />
jQuery是继prototype之后又一个优秀的Javascrīpt框架。其宗旨是——WRITE LESS,DO MORE,写更少的代码,做更多的事情。 <br />
它是轻量级的js库(压缩后只有21k) ，这是其它的js库所不及的，它兼容CSS3，还兼容各种浏览器 （IE 6.0+, FF 1.5+, Safari 2.0+, Opera 9.0+）。 <br />
jQuery是一个快速的，简洁的javaScript库，使用户能更方便地处理HTML documents、events、实现动画效果，并且方便地为网站提供AJAX交互。 <br />
jQuery还有一个比较大的优势是，它的文档说明很全，而且各种应用也说得很详细，同时还有许多成熟的插件可供选择。 <br />
jQuery能够使用户的html页保持代码和html内容分离，也就是说，不用再在html里面插入一堆js来调用命令了，只需定义id即可。 <br />
jQuery的最新release版本是1.2.6。<br />
官方下载地址为：http://jqueryjs.googlecode.com/files/jquery-1.2.6.min.js<br />
微软的visual studio 2008 sp1支持对jquery的动态提示，只要在代码页导入对应的vsdoc脚本就可以。<br />
目前为止，jQuery的最新版本为1.3.2
<img src ="http://www.blogjava.net/ocean07000814/aggbug/289819.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ocean07000814/" target="_blank">非洲小白脸</a> 2009-08-04 17:48 <a href="http://www.blogjava.net/ocean07000814/articles/289819.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Ext.data.Store的基本用法</title><link>http://www.blogjava.net/ocean07000814/articles/287262.html</link><dc:creator>非洲小白脸</dc:creator><author>非洲小白脸</author><pubDate>Sat, 18 Jul 2009 09:53:00 GMT</pubDate><guid>http://www.blogjava.net/ocean07000814/articles/287262.html</guid><wfw:comment>http://www.blogjava.net/ocean07000814/comments/287262.html</wfw:comment><comments>http://www.blogjava.net/ocean07000814/articles/287262.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/ocean07000814/comments/commentRss/287262.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ocean07000814/services/trackbacks/287262.html</trackback:ping><description><![CDATA[<pre>Ext.data.Store是EXT中用来进行数据交换和数据交互的标准中间件，无论是Grid还是ComboBox，都是通过它实现数据读取、类型转换、排序分页和搜索等操作的。<br />
<br />
Ext.data.Store中有一个Ext.data.Record数组，所有数据都存放在这些Ext.data. Record实例中，为后面的读取和修改操作做准备。<br />
<br />
<strong style="color: blue;">Ext.data.Store的基本用法</strong><br />
<br />
在使用之前，首先要创建一个Ext.data.Store的实例，如下面的代码所示。<br />
<br />
<div class="dp-highlighter">
<ol class="dp-c">
    <li class="alt"><span><span class="keyword">var</span><span>&nbsp;data&nbsp;=&nbsp;[ &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;[</span><span class="string">'boy'</span><span>,&nbsp;0], &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;[</span><span class="string">'girl'</span><span>,&nbsp;1] &nbsp;&nbsp;</span></li>
    <li><span>]; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li><span class="keyword">var</span><span>&nbsp;store&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;Ext.data.Store({ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;proxy:&nbsp;</span><span class="keyword">new</span><span>&nbsp;Ext.data.MemoryProxy(data), &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;reader:&nbsp;</span><span class="keyword">new</span><span>&nbsp;Ext.data.ArrayReader({},&nbsp;PersonRecord) &nbsp;&nbsp;</span></li>
    <li class="alt"><span>}); &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>store.load();&nbsp;&nbsp;</span></li>
</ol>
</div>
<div class="dp-highlighter">
<ol class="dp-c" start="1">
    <li class="alt"><span><span class="keyword">var</span><span>&nbsp;data&nbsp;=&nbsp;[&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;[<span class="string">'boy'</span><span>,&nbsp;0],&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;[<span class="string">'girl'</span><span>,&nbsp;1]&nbsp;&nbsp;</span></span></li>
    <li class=""><span>];&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span><span class="keyword">var</span><span>&nbsp;store&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;Ext.data.Store({&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;proxy:&nbsp;<span class="keyword">new</span><span>&nbsp;Ext.data.MemoryProxy(data),&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;reader:&nbsp;<span class="keyword">new</span><span>&nbsp;Ext.data.ArrayReader({},&nbsp;PersonRecord)&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>});&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>store.load();&nbsp;&nbsp;</span></li>
</ol>
</div>
<textarea style="display: none;" cols="50" rows="15" name="code" class="javascript:nocontrols">var data = [
['boy', 0],
['girl', 1]
];
var store = new Ext.data.Store({
proxy: new Ext.data.MemoryProxy(data),
reader: new Ext.data.ArrayReader({}, PersonRecord)
});
store.load();
</textarea><br />
<br />
每个store最少需要两个组件的支持，分别是proxy和reader，proxy用于从某个途径读取原始数据，reader用于将原始数据转换成Record实例。<br />
<br />
这里我们使用的是Ext.data.MemoryProxy和Ext.data.ArrayReader，将data数组中的数据转换成对应的几个PersonRecord实例，然后放入store中。<br />
<br />
store创建完毕之后，执行store.load()实现这个转换过程。<br />
<br />
经过转换之后，store里的数据就可以提供给Grid或ComboBox使用了，这就是Ext.data. Store的最基本用法。<br />
<br />
<br />
<strong style="color: blue;">Ext.data.Store对数据进行排序</strong><br />
<br />
<br />
Ext.data.Store提供了一系列属性和函数，利用它们对数据进行排序操作。<br />
<br />
可以在创建Ext.data.Store时使用sortInfo参数指定排序的字段和排序方式，如下面的代码所示。<br />
<br />
<div class="dp-highlighter">
<ol class="dp-c">
    <li class="alt"><span><span class="keyword">var</span><span>&nbsp;store&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;Ext.data.Store({ &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;proxy:&nbsp;</span><span class="keyword">new</span><span>&nbsp;Ext.data.MemoryProxy(data), &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;reader:&nbsp;</span><span class="keyword">new</span><span>&nbsp;Ext.data.ArrayReader({},&nbsp;PersonRecord), &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;sortInfo:&nbsp;{field:&nbsp;</span><span class="string">'name'</span><span>,&nbsp;direction:&nbsp;</span><span class="string">'DESC'</span><span>} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>});&nbsp;&nbsp;</span></li>
</ol>
</div>
<div class="dp-highlighter">
<ol class="dp-c" start="1">
    <li class="alt"><span><span class="keyword">var</span><span>&nbsp;store&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;Ext.data.Store({&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;proxy:&nbsp;<span class="keyword">new</span><span>&nbsp;Ext.data.MemoryProxy(data),&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;reader:&nbsp;<span class="keyword">new</span><span>&nbsp;Ext.data.ArrayReader({},&nbsp;PersonRecord),&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;sortInfo:&nbsp;{field:&nbsp;<span class="string">'name'</span><span>,&nbsp;direction:&nbsp;</span><span class="string">'DESC'</span><span>}&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>});&nbsp;&nbsp;</span></li>
</ol>
</div>
<textarea style="display: none;" cols="50" rows="15" name="code" class="javascript:nocontrols">var store = new Ext.data.Store({
proxy: new Ext.data.MemoryProxy(data),
reader: new Ext.data.ArrayReader({}, PersonRecord),
sortInfo: {field: 'name', direction: 'DESC'}
});
</textarea><br />
<br />
这样，在store加载数据之后，就会自动根据name字段进行降序排列。对store使用store.setDefaultSort('name','DESC');也会达到同样效果。<br />
<br />
也可以在任何时候调用sort()函数，比如store.sort('name', 'DESC');，对store中的数据进行排序。<br />
<br />
如果我们希望获得store的排序信息，可以调用getSortState()函数，返回的是类似{field: "name", direction: " DESC"}的JSON对象。<br />
<br />
与排序相关的参数还有remoteSort，这个参数是用来实现后台排序功能的。<br />
<br />
当设置为remoteSort:true时，store会在向后台请求数据时自动加入sort和dir两个参数，<br />
<br />
分别对应排序的字段和排序的方式，由后台获取并处理这两个参数，在后台对所需数据进行排序操作。<br />
<br />
remoteSort:true也会导致每次执行sort()时都要去后台重新加载数据，而不能只对本地数据进行排序。<br />
<br />
<br />
<strong style="color: blue;">Ext.data.Store从store中获取数据</strong><br />
<br />
从store中获取数据有很多种途径，可以依据不同的要求选择不同的函数。<br />
<br />
最直接的方法是根据record在store中的行号获得对应的record，得到了record就可以使用get()函数获得里面的数据了，如下面的代码所示。<br />
<br />
<div class="dp-highlighter">
<ol class="dp-c">
    <li class="alt"><span><span>store.getAt(0).get(</span><span class="string">'name'</span><span>)&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<div class="dp-highlighter">
<ol class="dp-c" start="1">
    <li class="alt"><span><span>store.getAt(0).get(</span><span class="string">'name'</span><span>)&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<textarea style="display: none;" cols="50" rows="15" name="code" class="javascript:nocontrols">store.getAt(0).get('name')
</textarea><br />
<br />
通过这种方式，我们可以遍历store中所有的record，依次得到它们的数据，如下面的代码所示。<br />
<br />
<div class="dp-highlighter">
<ol class="dp-c">
    <li class="alt"><span><span class="keyword">for</span><span>&nbsp;(</span><span class="keyword">var</span><span>&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;store.getCount();&nbsp;i++)&nbsp;{ &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">var</span><span>&nbsp;record&nbsp;=&nbsp;store.getAt(i); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;alert(record.get(</span><span class="string">'name'</span><span>)); &nbsp;&nbsp;</span></li>
    <li><span>}&nbsp;&nbsp;</span></li>
</ol>
</div>
<div class="dp-highlighter">
<ol class="dp-c" start="1">
    <li class="alt"><span><span class="keyword">for</span><span>&nbsp;(</span><span class="keyword">var</span><span>&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;store.getCount();&nbsp;i++)&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">var</span><span>&nbsp;record&nbsp;=&nbsp;store.getAt(i);&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;alert(record.get(<span class="string">'name'</span><span>));&nbsp;&nbsp;</span></span></li>
    <li class=""><span>}&nbsp;&nbsp;</span></li>
</ol>
</div>
<textarea style="display: none;" cols="50" rows="15" name="code" class="javascript:nocontrols">for (var i = 0; i &lt; store.getCount(); i++) {
var record = store.getAt(i);
alert(record.get('name'));
}
</textarea><br />
<br />
Store.getCount()返回的是store中的所有数据记录，然后使用for循环遍历整个store，从而得到每条记录。<br />
<br />
除了使用getCount()的方法外，还可以使用each()函数，如下面的代码所示。<br />
<br />
<div class="dp-highlighter">
<ol class="dp-c">
    <li class="alt"><span><span>store.each(</span><span class="keyword">function</span><span>(record)&nbsp;{ &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;alert(record.get(</span><span class="string">'name'</span><span>)); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>});&nbsp;&nbsp;</span></li>
</ol>
</div>
<div class="dp-highlighter">
<ol class="dp-c" start="1">
    <li class="alt"><span><span>store.each(</span><span class="keyword">function</span><span>(record)&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;alert(record.get(<span class="string">'name'</span><span>));&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>});&nbsp;&nbsp;</span></li>
</ol>
</div>
<textarea style="display: none;" cols="50" rows="15" name="code" class="javascript:nocontrols">store.each(function(record) {
alert(record.get('name'));
});
</textarea><br />
<br />
Each()可以接受一个函数作为参数，遍历内部record，并将每个record作为参数传递给function()处理。<br />
<br />
如果希望停止遍历，可以让function()返回false。<br />
<br />
也可以使用getRange()函数连续获得多个record，只需要指定开始和结束位置的索引值，如下面的代码所示。<br />
<br />
<div class="dp-highlighter">
<ol class="dp-c">
    <li class="alt"><span><span class="keyword">var</span><span>&nbsp;records&nbsp;=&nbsp;store.getRange(0,&nbsp;1); &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="keyword">for</span><span>&nbsp;(</span><span class="keyword">var</span><span>&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;records.length;&nbsp;i++)&nbsp;{ &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">var</span><span>&nbsp;record&nbsp;=&nbsp;records[i]; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;alert(record.get(</span><span class="string">'name'</span><span>)); &nbsp;&nbsp;</span></li>
    <li><span>}&nbsp;&nbsp;</span></li>
</ol>
</div>
<div class="dp-highlighter">
<ol class="dp-c" start="1">
    <li class="alt"><span><span class="keyword">var</span><span>&nbsp;records&nbsp;=&nbsp;store.getRange(0,&nbsp;1);&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span><span class="keyword">for</span><span>&nbsp;(</span><span class="keyword">var</span><span>&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;records.length;&nbsp;i++)&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">var</span><span>&nbsp;record&nbsp;=&nbsp;records[i];&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;alert(record.get(<span class="string">'name'</span><span>));&nbsp;&nbsp;</span></span></li>
    <li class=""><span>}&nbsp;&nbsp;</span></li>
</ol>
</div>
<textarea style="display: none;" cols="50" rows="15" name="code" class="javascript:nocontrols">var records = store.getRange(0, 1);
for (var i = 0; i &lt; records.length; i++) {
var record = records[i];
alert(record.get('name'));
}
</textarea><br />
<br />
<br />
如果确实不知道record的id，也可以根据record本身的id从store中获得对应的record，如下面的代码所示。<br />
<br />
<br />
<div class="dp-highlighter">
<ol class="dp-c">
    <li class="alt"><span><span>store.getById(1001).get(</span><span class="string">'name'</span><span>)&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<div class="dp-highlighter">
<ol class="dp-c" start="1">
    <li class="alt"><span><span>store.getById(1001).get(</span><span class="string">'name'</span><span>)&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<textarea style="display: none;" cols="50" rows="15" name="code" class="javascript:nocontrols">store.getById(1001).get('name')
</textarea><br />
<br />
<br />
EXT还提供了函数find()和findBy()，可以利用它们对store中的数据进行搜索，如下面的代码所示。<br />
<br />
<div class="dp-highlighter">
<ol class="dp-c">
    <li class="alt"><span><span>find(&nbsp;String&nbsp;property,&nbsp;String/RegExp&nbsp;value,&nbsp;[Number&nbsp;startIndex],&nbsp;[Boolean&nbsp;anyMatch],[Boolean&nbsp;caseSensitive]&nbsp;)&nbsp;&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<div class="dp-highlighter">
<ol class="dp-c" start="1">
    <li class="alt"><span><span>find(&nbsp;String&nbsp;property,&nbsp;String/RegExp&nbsp;value,&nbsp;[Number&nbsp;startIndex],&nbsp;[Boolean&nbsp;anyMatch],[Boolean&nbsp;caseSensitive]&nbsp;)&nbsp;&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<textarea style="display: none;" cols="50" rows="15" name="code" class="javascript:nocontrols">find( String property, String/RegExp value, [Number startIndex], [Boolean anyMatch],[Boolean caseSensitive] )
</textarea><br />
<br />
<br />
在这5个参数中，只有前两个是必须的。<br />
<br />
第一个参数property代表搜索的字段名；<br />
<br />
第二个参数value是匹配用字符串或正则表达式；<br />
<br />
第三个参数startIndex表示从第几行开始搜索;<br />
<br />
第四个参数anyMatch为true时，不必从头开始匹配；<br />
<br />
第五个参数caseSensitive为true时，会区分大小写。<br />
<br />
如下面的代码所示：<br />
<br />
<div class="dp-highlighter">
<ol class="dp-c">
    <li class="alt"><span><span class="keyword">var</span><span>&nbsp;index&nbsp;=&nbsp;store.find(</span><span class="string">'name'</span><span>,</span><span class="string">'g'</span><span>); &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>alert(store.getAt(index).get(</span><span class="string">'name'</span><span>));&nbsp;&nbsp;</span></li>
</ol>
</div>
<div class="dp-highlighter">
<ol class="dp-c" start="1">
    <li class="alt"><span><span class="keyword">var</span><span>&nbsp;index&nbsp;=&nbsp;store.find(</span><span class="string">'name'</span><span>,</span><span class="string">'g'</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>alert(store.getAt(index).get(<span class="string">'name'</span><span>));&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<textarea style="display: none;" cols="50" rows="15" name="code" class="javascript:nocontrols">var index = store.find('name','g');
alert(store.getAt(index).get('name'));
</textarea><br />
<br />
<br />
与find()函数对应的findBy()函数的定义格式如下：<br />
<br />
<div class="dp-highlighter">
<ol class="dp-c">
    <li class="alt"><span><span>findBy(&nbsp;Function&nbsp;fn,&nbsp;[Object&nbsp;scope],&nbsp;[Number&nbsp;startIndex]&nbsp;)&nbsp;:&nbsp;Number&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<div class="dp-highlighter">
<ol class="dp-c" start="1">
    <li class="alt"><span><span>findBy(&nbsp;Function&nbsp;fn,&nbsp;[Object&nbsp;scope],&nbsp;[Number&nbsp;startIndex]&nbsp;)&nbsp;:&nbsp;Number&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<textarea style="display: none;" cols="50" rows="15" name="code" class="javascript:nocontrols">findBy( Function fn, [Object scope], [Number startIndex] ) : Number
</textarea><br />
<br />
<br />
findBy()函数允许用户使用自定义函数对内部数据进行搜索。<br />
<br />
fn返回true时，表示查找成功，于是停止遍历并返回行号。<br />
<br />
fn返回false时，表示查找失败（即未找到），继续遍历，如下面的代码所示。<br />
<br />
<br />
<div class="dp-highlighter">
<ol class="dp-c">
    <li class="alt"><span><span>index&nbsp;=&nbsp;store.findBy(</span><span class="keyword">function</span><span>(record,&nbsp;id)&nbsp;{ &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;record.get(</span><span class="string">'name'</span><span>)&nbsp;==&nbsp;</span><span class="string">'girl'</span><span>&nbsp;&amp;&amp;&nbsp;record.get(</span><span class="string">'sex'</span><span>)&nbsp;==&nbsp;1; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>}); &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>alert(store.getAt(index).get(</span><span class="string">'name'</span><span>));&nbsp;&nbsp;</span></li>
</ol>
</div>
<div class="dp-highlighter">
<ol class="dp-c" start="1">
    <li class="alt"><span><span>index&nbsp;=&nbsp;store.findBy(</span><span class="keyword">function</span><span>(record,&nbsp;id)&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">return</span><span>&nbsp;record.get(</span><span class="string">'name'</span><span>)&nbsp;==&nbsp;</span><span class="string">'girl'</span><span>&nbsp;&amp;&amp;&nbsp;record.get(</span><span class="string">'sex'</span><span>)&nbsp;==&nbsp;1;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>});&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>alert(store.getAt(index).get(<span class="string">'name'</span><span>));&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<textarea style="display: none;" cols="50" rows="15" name="code" class="javascript:nocontrols">index = store.findBy(function(record, id) {
return record.get('name') == 'girl' &amp;&amp; record.get('sex') == 1;
});
alert(store.getAt(index).get('name'));
</textarea><br />
<br />
<br />
通过findBy()函数，我们可以同时判断record中的多个字段，在函数中实现复杂逻辑。<br />
<br />
我们还可以使用query和queryBy函数对store中的数据进行查询。<br />
<br />
与find和findBy不同的是，query和queryBy返回的是一个MixCollection对象，里面包含了搜索得到的数据，如下面的代码所示。<br />
<br />
<div class="dp-highlighter">
<ol class="dp-c">
    <li class="alt"><span><span>alert(store.query(</span><span class="string">'name'</span><span>,&nbsp;</span><span class="string">'boy'</span><span>)); &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>alert(store.queryBy(</span><span class="keyword">function</span><span>(record)&nbsp;{ &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;record.get(</span><span class="string">'name'</span><span>)&nbsp;==&nbsp;</span><span class="string">'girl'</span><span>&nbsp;&amp;&amp;&nbsp;record.get(</span><span class="string">'sex'</span><span>)&nbsp;==&nbsp;1; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>}));&nbsp;&nbsp;</span></li>
</ol>
</div>
<div class="dp-highlighter">
<ol class="dp-c" start="1">
    <li class="alt"><span><span>alert(store.query(</span><span class="string">'name'</span><span>,&nbsp;</span><span class="string">'boy'</span><span>));&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>alert(store.queryBy(<span class="keyword">function</span><span>(record)&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">return</span><span>&nbsp;record.get(</span><span class="string">'name'</span><span>)&nbsp;==&nbsp;</span><span class="string">'girl'</span><span>&nbsp;&amp;&amp;&nbsp;record.get(</span><span class="string">'sex'</span><span>)&nbsp;==&nbsp;1;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>}));&nbsp;&nbsp;</span></li>
</ol>
</div>
<textarea style="display: none;" cols="50" rows="15" name="code" class="javascript:nocontrols">alert(store.query('name', 'boy'));
alert(store.queryBy(function(record) {
return record.get('name') == 'girl' &amp;&amp; record.get('sex') == 1;
}));
</textarea><br />
<br />
<br />
<strong style="color: blue;">Ext.data.Store更新store中的数据</strong><br />
<br />
可以使用add(Ext.data.Record[] records)向store末尾添加一个或多个record，使用的参数可以是一个record实例，如下面的代码所示。<br />
<br />
<div class="dp-highlighter">
<ol class="dp-c">
    <li class="alt"><span><span>store.add(</span><span class="keyword">new</span><span>&nbsp;PersonRecord({ &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;name:&nbsp;</span><span class="string">'other'</span><span>, &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;sex:&nbsp;0 &nbsp;&nbsp;</span></li>
    <li><span>}));&nbsp;&nbsp;</span></li>
</ol>
</div>
<div class="dp-highlighter">
<ol class="dp-c" start="1">
    <li class="alt"><span><span>store.add(</span><span class="keyword">new</span><span>&nbsp;PersonRecord({&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;name:&nbsp;<span class="string">'other'</span><span>,&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;sex:&nbsp;0&nbsp;&nbsp;</span></li>
    <li class=""><span>}));&nbsp;&nbsp;</span></li>
</ol>
</div>
<textarea style="display: none;" cols="50" rows="15" name="code" class="javascript:nocontrols">store.add(new PersonRecord({
name: 'other',
sex: 0
}));
</textarea><br />
<br />
Add()的也可以添加一个record数组，如下面的代码所示：<br />
<br />
<div class="dp-highlighter">
<ol class="dp-c">
    <li class="alt"><span><span>store.add([</span><span class="keyword">new</span><span>&nbsp;PersonRecord({ &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;name:&nbsp;</span><span class="string">'other1'</span><span>, &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;sex:&nbsp;0 &nbsp;&nbsp;</span></li>
    <li><span>}),&nbsp;</span><span class="keyword">new</span><span>&nbsp;PersonRecord({ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;name:&nbsp;</span><span class="string">'other2'</span><span>, &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;sex:&nbsp;0 &nbsp;&nbsp;</span></li>
    <li class="alt"><span>})]);&nbsp;&nbsp;</span></li>
</ol>
</div>
<div class="dp-highlighter">
<ol class="dp-c" start="1">
    <li class="alt"><span><span>store.add([</span><span class="keyword">new</span><span>&nbsp;PersonRecord({&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;name:&nbsp;<span class="string">'other1'</span><span>,&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;sex:&nbsp;0&nbsp;&nbsp;</span></li>
    <li class=""><span>}),&nbsp;<span class="keyword">new</span><span>&nbsp;PersonRecord({&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;name:&nbsp;<span class="string">'other2'</span><span>,&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;sex:&nbsp;0&nbsp;&nbsp;</span></li>
    <li class="alt"><span>})]);&nbsp;&nbsp;</span></li>
</ol>
</div>
<textarea style="display: none;" cols="50" rows="15" name="code" class="javascript:nocontrols">store.add([new PersonRecord({
name: 'other1',
sex: 0
}), new PersonRecord({
name: 'other2',
sex: 0
})]);
</textarea><br />
<br />
<br />
Add()函数每次都会将新数据添加到store的末尾，这就有可能破坏store原有的排序方式。如果希望根据store原来的排序方式将新数据插入到对应的位置，可以使用addSorted()函数。它会在添加新数据之后立即对store进行排序，这样就可以保证store中的数据有序地显示，如下面的代码所示。<br />
<br />
<div class="dp-highlighter">
<ol class="dp-c">
    <li class="alt"><span><span>store.addSorted(</span><span class="keyword">new</span><span>&nbsp;PersonRecord({ &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;name:&nbsp;</span><span class="string">'lili'</span><span>, &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;sex:&nbsp;1 &nbsp;&nbsp;</span></li>
    <li><span>}));&nbsp;&nbsp;</span></li>
</ol>
</div>
<div class="dp-highlighter">
<ol class="dp-c" start="1">
    <li class="alt"><span><span>store.addSorted(</span><span class="keyword">new</span><span>&nbsp;PersonRecord({&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;name:&nbsp;<span class="string">'lili'</span><span>,&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;sex:&nbsp;1&nbsp;&nbsp;</span></li>
    <li class=""><span>}));&nbsp;&nbsp;</span></li>
</ol>
</div>
<textarea style="display: none;" cols="50" rows="15" name="code" class="javascript:nocontrols">store.addSorted(new PersonRecord({
name: 'lili',
sex: 1
}));
</textarea><br />
<br />
store会根据排序信息查找这条record应该插入的索引位置，然后根据得到的索引位置插入数据，从而实现对整体进行排序。这个函数需要预先为store设置本地排序，否则会不起作用。<br />
<br />
如果希望自己指定数据插入的索引位置，可以使用insert()函数。它的第一个参数表示插入数据的索引位置，可以使用record实例或record实例的数组作为参数，插入之后，后面的数据自动后移，如下面的代码所示。<br />
<br />
<div class="dp-highlighter">
<ol class="dp-c">
    <li class="alt"><span><span>store.insert(3,&nbsp;</span><span class="keyword">new</span><span>&nbsp;PersonRecord({ &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;name:&nbsp;</span><span class="string">'other'</span><span>, &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;sex:&nbsp;0 &nbsp;&nbsp;</span></li>
    <li><span>})); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li><span>store.insert(3,&nbsp;[</span><span class="keyword">new</span><span>&nbsp;PersonRecord({ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;name:&nbsp;</span><span class="string">'other1'</span><span>, &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;sex:&nbsp;0 &nbsp;&nbsp;</span></li>
    <li class="alt"><span>}),&nbsp;</span><span class="keyword">new</span><span>&nbsp;PersonRecord({ &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;name:&nbsp;</span><span class="string">'other2'</span><span>, &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;sex:&nbsp;0 &nbsp;&nbsp;</span></li>
    <li><span>})]);&nbsp;&nbsp;</span></li>
</ol>
</div>
<div class="dp-highlighter">
<ol class="dp-c" start="1">
    <li class="alt"><span><span>store.insert(3,&nbsp;</span><span class="keyword">new</span><span>&nbsp;PersonRecord({&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;name:&nbsp;<span class="string">'other'</span><span>,&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;sex:&nbsp;0&nbsp;&nbsp;</span></li>
    <li class=""><span>}));&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>store.insert(3,&nbsp;[<span class="keyword">new</span><span>&nbsp;PersonRecord({&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;name:&nbsp;<span class="string">'other1'</span><span>,&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;sex:&nbsp;0&nbsp;&nbsp;</span></li>
    <li class="alt"><span>}),&nbsp;<span class="keyword">new</span><span>&nbsp;PersonRecord({&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;name:&nbsp;<span class="string">'other2'</span><span>,&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;sex:&nbsp;0&nbsp;&nbsp;</span></li>
    <li class=""><span>})]);&nbsp;&nbsp;</span></li>
</ol>
</div>
<textarea style="display: none;" cols="50" rows="15" name="code" class="javascript:nocontrols">store.insert(3, new PersonRecord({
name: 'other',
sex: 0
}));
store.insert(3, [new PersonRecord({
name: 'other1',
sex: 0
}), new PersonRecord({
name: 'other2',
sex: 0
})]);
</textarea><br />
<br />
<br />
删除操作可以使用remove()和removeAll()函数，它们分别可以删除指定的record和清空整个store中的数据，如下面的代码所示。<br />
<br />
<div class="dp-highlighter">
<ol class="dp-c">
    <li class="alt"><span><span>store.remove(store.getAt(0)); &nbsp;&nbsp;</span></span></li>
    <li><span>store.removeAll();&nbsp;&nbsp;</span></li>
</ol>
</div>
<div class="dp-highlighter">
<ol class="dp-c" start="1">
    <li class="alt"><span><span>store.remove(store.getAt(0));&nbsp;&nbsp;</span></span></li>
    <li class=""><span>store.removeAll();&nbsp;&nbsp;</span></li>
</ol>
</div>
<textarea style="display: none;" cols="50" rows="15" name="code" class="javascript:nocontrols">store.remove(store.getAt(0));
store.removeAll();
</textarea><br />
<br />
<br />
store中没有专门提供修改某一行record的操作，我们需要先从store中获取一个record。对这个record内部数据的修改会直接反映到store上，如下面的代码所示。<br />
<br />
<div class="dp-highlighter">
<ol class="dp-c">
    <li class="alt"><span><span>store.getAt(0).set(</span><span class="string">'name'</span><span>,&nbsp;</span><span class="string">'xxxx'</span><span>);&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<div class="dp-highlighter">
<ol class="dp-c" start="1">
    <li class="alt"><span><span>store.getAt(0).set(</span><span class="string">'name'</span><span>,&nbsp;</span><span class="string">'xxxx'</span><span>);&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<textarea style="display: none;" cols="50" rows="15" name="code" class="javascript:nocontrols">store.getAt(0).set('name', 'xxxx');
</textarea><br />
<br />
<br />
修改record的内部数据之后有两种选择：执行rejectChanges()撤销所有修改，将修改过的record恢复到原来的状态；执行commitChanges()提交数据修改。在执行撤销和提交操作之前，可以使用getModifiedRecords()获得store中修改过的record数组。<br />
<br />
与修改数据相关的参数是pruneModifiedRecords，如果将它设置为true，当每次执行删除或reload操作时，都会清空所有修改。这样，在每次执行删除或reload操作之后，getModifiedRecords()返回的就是一个空数组，否则仍然会得到上次修改过的record记录<br />
<br />
<br />
<strong style="color: blue;">Ext.data.Store加载及显示数据</strong><br />
<br />
store创建好后，需要调用load()函数加载数据，加载成功后才能对store中的数据进行操作。load()调用的完整过程如下面的代码所示。<br />
<br />
<div class="dp-highlighter">
<ol class="dp-c">
    <li class="alt"><span><span>store.load({ &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;params:&nbsp;{start:0,limit:20}, &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;callback:&nbsp;</span><span class="keyword">function</span><span>(records,&nbsp;options,&nbsp;success){ &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ext.Msg.alert(</span><span class="string">'info'</span><span>,&nbsp;</span><span class="string">'加载完毕'</span><span>); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}, &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;scope:&nbsp;store, &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;add:&nbsp;</span><span class="keyword">true</span><span>&nbsp;&nbsp;</span></li>
    <li><span>});&nbsp;&nbsp;</span></li>
</ol>
</div>
<div class="dp-highlighter">
<ol class="dp-c" start="1">
    <li class="alt"><span><span>store.load({&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;params:&nbsp;{start:0,limit:20},&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;callback:&nbsp;<span class="keyword">function</span><span>(records,&nbsp;options,&nbsp;success){&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ext.Msg.alert(<span class="string">'info'</span><span>,&nbsp;</span><span class="string">'加载完毕'</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;},&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;scope:&nbsp;store,&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;add:&nbsp;<span class="keyword">true</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>});&nbsp;&nbsp;</span></li>
</ol>
</div>
<textarea style="display: none;" cols="50" rows="15" name="code" class="javascript:nocontrols">store.load({
params: {start:0,limit:20},
callback: function(records, options, success){
Ext.Msg.alert('info', '加载完毕');
},
scope: store,
add: true
});
</textarea><br />
<br />
1. params是在store加载时发送的附加参数。<br />
<br />
2. callback是加载完毕时执行的回调函数，它包含3个参数：records参数表示获得的数据，options表示执行load()时传递的参数，success表示是否加载成功。<br />
<br />
3. Scope用来指定回调函数执行时的作用域。<br />
<br />
4. Add为true时，load()得到的数据会添加在原来的store数据的末尾，否则会先清除之前的数据，再将得到的数据添加到store中。<br />
<br />
一般来说，为了对store中的数据进行初始化，load()函数只需要执行一次。如果用params参数指定了需要使用的参数，以后再次执行reload()重新加载数据时，store会自动使用上次load()中包含的params参数内容。<br />
<br />
如果有一些需要固定传递的参数，也可以使用baseParams参数执行，它是一个JSON对象，里面的数据会作为参数发送给后台处理，如下面的代码所示。<br />
<br />
<div class="dp-highlighter">
<ol class="dp-c">
    <li class="alt"><span><span>store.baseParams.start&nbsp;=&nbsp;0; &nbsp;&nbsp;</span></span></li>
    <li><span>store.baseParams.limit&nbsp;=&nbsp;20;&nbsp;&nbsp;</span></li>
</ol>
</div>
<div class="dp-highlighter">
<ol class="dp-c" start="1">
    <li class="alt"><span><span>store.baseParams.start&nbsp;=&nbsp;0;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>store.baseParams.limit&nbsp;=&nbsp;20;&nbsp;&nbsp;</span></li>
</ol>
</div>
<textarea style="display: none;" cols="50" rows="15" name="code" class="javascript:nocontrols">store.baseParams.start = 0;
store.baseParams.limit = 20;
</textarea><br />
<br />
为store加载数据之后，有时不需要把所有数据都显示出来，这时可以使用函数filter和filterBy对store中的数据进行过滤，只显示符合条件的部分，如下面的代码所示。<br />
<br />
<div class="dp-highlighter">
<ol class="dp-c">
    <li class="alt"><span><span>filter(&nbsp;String&nbsp;field,&nbsp;String/RegExp&nbsp;value,&nbsp;[Boolean&nbsp;anyMatch],&nbsp;[Boolean&nbsp;caseSensitive]&nbsp;)&nbsp;:&nbsp;</span><span class="keyword">void</span><span>&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<div class="dp-highlighter">
<ol class="dp-c" start="1">
    <li class="alt"><span><span>filter(&nbsp;String&nbsp;field,&nbsp;String/RegExp&nbsp;value,&nbsp;[Boolean&nbsp;anyMatch],&nbsp;[Boolean&nbsp;caseSensitive]&nbsp;)&nbsp;:&nbsp;</span><span class="keyword">void</span><span>&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<textarea style="display: none;" cols="50" rows="15" name="code" class="javascript:nocontrols">filter( String field, String/RegExp value, [Boolean anyMatch], [Boolean caseSensitive] ) : void
</textarea><br />
<br />
<br />
filter()函数的用法与之前谈到的find()相似，如下面的代码所示。<br />
<br />
<div class="dp-highlighter">
<ol class="dp-c">
    <li class="alt"><span><span>store.filter(</span><span class="string">'name'</span><span>,&nbsp;</span><span class="string">'boy'</span><span>);&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<div class="dp-highlighter">
<ol class="dp-c" start="1">
    <li class="alt"><span><span>store.filter(</span><span class="string">'name'</span><span>,&nbsp;</span><span class="string">'boy'</span><span>);&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<textarea style="display: none;" cols="50" rows="15" name="code" class="javascript:nocontrols">store.filter('name', 'boy');
</textarea><br />
<br />
对应的filterBy()与findBy()类似，也可以在自定义的函数中实现各种复杂判断，如下面的代码所示。<br />
<br />
<div class="dp-highlighter">
<ol class="dp-c">
    <li class="alt"><span><span>store.filterBy(</span><span class="keyword">function</span><span>(record)&nbsp;{ &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;record.get(</span><span class="string">'name'</span><span>)&nbsp;==&nbsp;</span><span class="string">'girl'</span><span>&nbsp;&amp;&amp;&nbsp;record.get(</span><span class="string">'sex'</span><span>)&nbsp;==&nbsp;1; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>});&nbsp;&nbsp;</span></li>
</ol>
</div>
<div class="dp-highlighter">
<ol class="dp-c" start="1">
    <li class="alt"><span><span>store.filterBy(</span><span class="keyword">function</span><span>(record)&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">return</span><span>&nbsp;record.get(</span><span class="string">'name'</span><span>)&nbsp;==&nbsp;</span><span class="string">'girl'</span><span>&nbsp;&amp;&amp;&nbsp;record.get(</span><span class="string">'sex'</span><span>)&nbsp;==&nbsp;1;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>});&nbsp;&nbsp;</span></li>
</ol>
</div>
<textarea style="display: none;" cols="50" rows="15" name="code" class="javascript:nocontrols">store.filterBy(function(record) {
return record.get('name') == 'girl' &amp;&amp; record.get('sex') == 1;
});
</textarea><br />
<br />
<br />
如果想取消过滤并显示所有数据，那么可以调用clearFilter()函数，如下面的代码所示。<br />
<br />
<div class="dp-highlighter">
<ol class="dp-c">
    <li class="alt"><span><span>store.clearFilter();&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<div class="dp-highlighter">
<ol class="dp-c" start="1">
    <li class="alt"><span><span>store.clearFilter();&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<textarea style="display: none;" cols="50" rows="15" name="code" class="javascript:nocontrols">store.clearFilter();
</textarea><br />
<br />
<br />
如果想知道store上是否设置了过滤器，可以通过isFiltered()函数进行判断。<br />
<br />
<br />
<strong style="color: blue;">Ext.data.Store其他功能</strong><br />
<br />
除了上面提到的数据获取、排序、更新、显示等功能外，store还提供了其他一些功能函数。<br />
<br />
<div class="dp-highlighter">
<ol class="dp-c">
    <li class="alt"><span><span>collect(&nbsp;String&nbsp;dataIndex,&nbsp;[Boolean&nbsp;allowNull],&nbsp;[Boolean&nbsp;bypassFilter]&nbsp;)&nbsp;:&nbsp;Array&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<div class="dp-highlighter">
<ol class="dp-c" start="1">
    <li class="alt"><span><span>collect(&nbsp;String&nbsp;dataIndex,&nbsp;[Boolean&nbsp;allowNull],&nbsp;[Boolean&nbsp;bypassFilter]&nbsp;)&nbsp;:&nbsp;Array&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<textarea style="display: none;" cols="50" rows="15" name="code" class="javascript:nocontrols">collect( String dataIndex, [Boolean allowNull], [Boolean bypassFilter] ) : Array
</textarea><br />
<br />
<br />
collect函数获得指定的dataIndex对应的那一列的数据，当allowNull参数为true时，返回的结果中可能会包含null、undefined或空字符串，否则collect函数会自动将这些空数据过滤掉。当bypassFilter参数为true时，collect的结果不会受查询条件的影响，无论查询条件是什么都会忽略掉，返回的信息是所有的数据，如下面的代码所示。<br />
<br />
<div class="dp-highlighter">
<ol class="dp-c">
    <li class="alt"><span><span>alert(store.collect(</span><span class="string">'name'</span><span>));&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<div class="dp-highlighter">
<ol class="dp-c" start="1">
    <li class="alt"><span><span>alert(store.collect(</span><span class="string">'name'</span><span>));&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<textarea style="display: none;" cols="50" rows="15" name="code" class="javascript:nocontrols">alert(store.collect('name'));
</textarea><br />
<br />
这样会获得所有name列的值，示例中返回的是包含了'boy'和'girl'的数组。<br />
<br />
getTotalCount()用于在翻页时获得后台传递过来的数据总数。如果没有设置翻页，get- TotalCount()的结果与getCount()相同，都是返回当前的数据总数，如下面的代码所示。<br />
<br />
<div class="dp-highlighter">
<ol class="dp-c">
    <li class="alt"><span><span>alert(store.getTotalCount());&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<div class="dp-highlighter">
<ol class="dp-c" start="1">
    <li class="alt"><span><span>alert(store.getTotalCount());&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<textarea style="display: none;" cols="50" rows="15" name="code" class="javascript:nocontrols">alert(store.getTotalCount());
</textarea><br />
<br />
<br />
indexOf(Ext.data.Record record)和indexOfId(String id)函数根据record或record的id获得record对应的行号，如下面的代码所示。<br />
<br />
<div class="dp-highlighter">
<ol class="dp-c">
    <li class="alt"><span><span>alert(store.indexOf(store.getAt(1))); &nbsp;&nbsp;</span></span></li>
    <li><span>alert(store.indexOfId(1001));&nbsp;&nbsp;</span></li>
</ol>
</div>
<div class="dp-highlighter">
<ol class="dp-c" start="1">
    <li class="alt"><span><span>alert(store.indexOf(store.getAt(1)));&nbsp;&nbsp;</span></span></li>
    <li class=""><span>alert(store.indexOfId(1001));&nbsp;&nbsp;</span></li>
</ol>
</div>
<textarea style="display: none;" cols="50" rows="15" name="code" class="javascript:nocontrols">alert(store.indexOf(store.getAt(1)));
alert(store.indexOfId(1001));
</textarea><br />
<br />
<br />
loadData(object data, [Boolean append])从本地JavaScript变量中读取数据，append为true时，将读取的数据附加到原数据后，否则执行整体更新，如下面的代码所示。<br />
<br />
<div class="dp-highlighter">
<ol class="dp-c">
    <li class="alt"><span><span>store.loadData(data,&nbsp;</span><span class="keyword">true</span><span>);&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<div class="dp-highlighter">
<ol class="dp-c" start="1">
    <li class="alt"><span><span>store.loadData(data,&nbsp;</span><span class="keyword">true</span><span>);&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<textarea style="display: none;" cols="50" rows="15" name="code" class="javascript:nocontrols">store.loadData(data, true);
</textarea><br />
<br />
Sum(String property, Number start, Number end):Number用于计算某一个列从start到end的总和，如下面的代码所示。<br />
<br />
<div class="dp-highlighter">
<ol class="dp-c">
    <li class="alt"><span><span>alert(store.sum(</span><span class="string">'sex'</span><span>));&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<div class="dp-highlighter">
<ol class="dp-c" start="1">
    <li class="alt"><span><span>alert(store.sum(</span><span class="string">'sex'</span><span>));&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<textarea style="display: none;" cols="50" rows="15" name="code" class="javascript:nocontrols">alert(store.sum('sex'));
</textarea><br />
<br />
<br />
如果省略参数start和end，就计算全部数据的总和。<br />
<br />
store还提供了一系列事件（见下表），让我们可以为对应操作设定操作函数。<br />
</pre>
<pre class="MsoNormal" style="margin: 6pt 0cm 3pt; text-indent: 0cm; line-height: normal; text-align: center;"><span style="color: #ff00ff;"><span style="font-size: 9pt; font-family: 黑体;">表</span><span style="font-size: 9pt; font-family: 黑体;">　</span><strong><span style="font-size: 9pt; font-family: Courier;" lang="EN-US">store</span></strong><span style="font-size: 9pt; font-family: 黑体;">提供的事件</span></span></pre>
<pre>
<table class="MsoNormalTable" style="width: 556px; border-collapse: collapse;" border="1" cellpadding="0" cellspacing="0">
    <tbody>
        <tr>
            <td style="padding: 0cm 5.4pt; width: 86.4pt; background-color: transparent;" valign="top" width="115">
            <p class="MsoNormal" style="margin: 1.4pt 0cm; text-indent: 0cm; line-height: normal; text-align: center;" align="center"><span style="color: #ff00ff;"><span style="font-size: 8pt; font-family: 黑体;">事件名</span></span></p>
            </td>
            <td style="padding: 0cm 5.4pt; width: 339.7pt; background-color: transparent;" valign="top" width="453">
            <p class="MsoNormal" style="margin: 1.4pt 0cm; text-indent: 0cm; line-height: normal; text-align: center;" align="center"><span style="color: #ff00ff;"><span style="font-size: 8pt; font-family: 黑体;">参　　数</span></span></p>
            </td>
        </tr>
        <tr>
            <td style="padding: 0cm 5.4pt; width: 86.4pt; background-color: transparent;" valign="top" width="115">
            <p class="MsoNormal" style="margin: 1.4pt 0cm; text-indent: 8pt; line-height: normal;"><span style="color: #ff00ff;"><span style="font-size: 8pt; font-family: Courier;" lang="EN-US">add</span></span></p>
            </td>
            <td style="padding: 0cm 5.4pt; width: 339.7pt; background-color: transparent;" valign="top" width="453">
            <p class="MsoNormal" style="margin: 1.4pt 0cm; text-indent: 8pt; line-height: normal;"><span style="color: #ff00ff;"><span style="font-size: 8pt; font-family: Courier;" lang="EN-US">( Store this, Ext.data.Record[] records, Number index )</span></span></p>
            </td>
        </tr>
        <tr>
            <td style="padding: 0cm 5.4pt; width: 86.4pt; background-color: transparent;" valign="top" width="115">
            <p class="MsoNormal" style="margin: 1.4pt 0cm; text-indent: 8pt; line-height: normal;"><span style="color: #ff00ff;"><span style="font-size: 8pt; font-family: Courier;" lang="EN-US">beforelaod</span></span></p>
            </td>
            <td style="padding: 0cm 5.4pt; width: 339.7pt; background-color: transparent;" valign="top" width="453">
            <p class="MsoNormal" style="margin: 1.4pt 0cm; text-indent: 8pt; line-height: normal;"><span style="color: #ff00ff;"><span style="font-size: 8pt; font-family: Courier;" lang="EN-US">( Store this, Object options )</span></span></p>
            </td>
        </tr>
        <tr>
            <td style="padding: 0cm 5.4pt; width: 86.4pt; background-color: transparent;" valign="top" width="115">
            <p class="MsoNormal" style="margin: 1.4pt 0cm; text-indent: 8pt; line-height: normal;"><span style="color: #ff00ff;"><span style="font-size: 8pt; font-family: Courier;" lang="EN-US">clear</span></span></p>
            </td>
            <td style="padding: 0cm 5.4pt; width: 339.7pt; background-color: transparent;" valign="top" width="453">
            <p class="MsoNormal" style="margin: 1.4pt 0cm; text-indent: 8pt; line-height: normal;"><span style="color: #ff00ff;"><span style="font-size: 8pt; font-family: Courier;" lang="EN-US">( Store this )</span></span></p>
            </td>
        </tr>
        <tr>
            <td style="padding: 0cm 5.4pt; width: 86.4pt; background-color: transparent;" valign="top" width="115">
            <p class="MsoNormal" style="margin: 1.4pt 0cm; text-indent: 8pt; line-height: normal;"><span style="color: #ff00ff;"><span style="font-size: 8pt; font-family: Courier;" lang="EN-US">datachanged</span></span></p>
            </td>
            <td style="padding: 0cm 5.4pt; width: 339.7pt; background-color: transparent;" valign="top" width="453">
            <p class="MsoNormal" style="margin: 1.4pt 0cm; text-indent: 8pt; line-height: normal;"><span style="color: #ff00ff;"><span style="font-size: 8pt; font-family: Courier;" lang="EN-US">( Store this )</span></span></p>
            </td>
        </tr>
        <tr>
            <td style="padding: 0cm 5.4pt; width: 86.4pt; background-color: transparent;" valign="top" width="115">
            <p class="MsoNormal" style="margin: 1.4pt 0cm; text-indent: 8pt; line-height: normal;"><span style="color: #ff00ff;"><span style="font-size: 8pt; font-family: Courier;" lang="EN-US">load</span></span></p>
            </td>
            <td style="padding: 0cm 5.4pt; width: 339.7pt; background-color: transparent;" valign="top" width="453">
            <p class="MsoNormal" style="margin: 1.4pt 0cm; text-indent: 8pt; line-height: normal;"><span style="color: #ff00ff;"><span style="font-size: 8pt; font-family: Courier;" lang="EN-US">( Store this, Ext.data.Record[] records, Object options )</span></span></p>
            </td>
        </tr>
        <tr>
            <td style="padding: 0cm 5.4pt; width: 86.4pt; background-color: transparent;" valign="top" width="115">
            <p class="MsoNormal" style="margin: 1.4pt 0cm; text-indent: 8pt; line-height: normal;"><span style="color: #ff00ff;"><span style="font-size: 8pt; font-family: Courier;" lang="EN-US">loadexception</span></span></p>
            </td>
            <td style="padding: 0cm 5.4pt; width: 339.7pt; background-color: transparent;" valign="top" width="453">
            <p class="MsoNormal" style="margin: 1.4pt 0cm; text-indent: 8pt; line-height: normal;"><span style="color: #ff00ff;"><span style="font-size: 8pt; font-family: Courier;" lang="EN-US">()</span></span></p>
            </td>
        </tr>
        <tr>
            <td style="padding: 0cm 5.4pt; width: 86.4pt; background-color: transparent;" valign="top" width="115">
            <p class="MsoNormal" style="margin: 1.4pt 0cm; text-indent: 8pt; line-height: normal;"><span style="color: #ff00ff;"><span style="font-size: 8pt; font-family: Courier;" lang="EN-US">metachange</span></span></p>
            </td>
            <td style="padding: 0cm 5.4pt; width: 339.7pt; background-color: transparent;" valign="top" width="453">
            <p class="MsoNormal" style="margin: 1.4pt 0cm; text-indent: 8pt; line-height: normal;"><span style="color: #ff00ff;"><span style="font-size: 8pt; font-family: Courier;" lang="EN-US">( Store this, Object meta. )</span></span></p>
            </td>
        </tr>
        <tr>
            <td style="padding: 0cm 5.4pt; width: 86.4pt; background-color: transparent;" valign="top" width="115">
            <p class="MsoNormal" style="margin: 1.4pt 0cm; text-indent: 8pt; line-height: normal;"><span style="color: #ff00ff;"><span style="font-size: 8pt; font-family: Courier;" lang="EN-US">remove</span></span></p>
            </td>
            <td style="padding: 0cm 5.4pt; width: 339.7pt; background-color: transparent;" valign="top" width="453">
            <p class="MsoNormal" style="margin: 1.4pt 0cm; text-indent: 8pt; line-height: normal;"><span style="color: #ff00ff;"><span style="font-size: 8pt; font-family: Courier;" lang="EN-US">( Store this, Ext.data.Record record, Number index )</span></span></p>
            </td>
        </tr>
        <tr>
            <td style="padding: 0cm 5.4pt; width: 86.4pt; background-color: transparent;" valign="top" width="115">
            <p class="MsoNormal" style="margin: 1.4pt 0cm; text-indent: 8pt; line-height: normal;"><span style="color: #ff00ff;"><span style="font-size: 8pt; font-family: Courier;" lang="EN-US">update</span></span></p>
            </td>
            <td style="padding: 0cm 5.4pt; width: 339.7pt; background-color: transparent;" valign="top" width="453">
            <p class="MsoNormal" style="margin: 1.4pt 0cm; text-indent: 8pt; line-height: normal;"><span style="color: #ff00ff;"><span style="font-size: 8pt; font-family: Courier;" lang="EN-US">( Store this, Ext.data.Record record, String operation )</span></span></p>
            </td>
        </tr>
    </tbody>
</table>
</pre>
至此，store和record等组件已经讲解完毕，下面我们主要讨论一下常用的proxy和reader组件。
<img src ="http://www.blogjava.net/ocean07000814/aggbug/287262.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ocean07000814/" target="_blank">非洲小白脸</a> 2009-07-18 17:53 <a href="http://www.blogjava.net/ocean07000814/articles/287262.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Ext.data.Store介绍</title><link>http://www.blogjava.net/ocean07000814/articles/287249.html</link><dc:creator>非洲小白脸</dc:creator><author>非洲小白脸</author><pubDate>Sat, 18 Jul 2009 07:02:00 GMT</pubDate><guid>http://www.blogjava.net/ocean07000814/articles/287249.html</guid><wfw:comment>http://www.blogjava.net/ocean07000814/comments/287249.html</wfw:comment><comments>http://www.blogjava.net/ocean07000814/articles/287249.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ocean07000814/comments/commentRss/287249.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ocean07000814/services/trackbacks/287249.html</trackback:ping><description><![CDATA[<h1>Ext.data.Store介绍</h1>
<code style="border: 1px solid #cccccc; margin: 0pt 1em 1em; padding: 0.5em; display: block; font-family: Courier,monospace; font-style: normal; font-variant: normal; font-weight: normal; font-size: 12px; font-size-adjust: none; font-stretch: normal; line-height: 1.8em;">var store = new Ext.data.Store({&nbsp; &nbsp;&nbsp; &nbsp;<br />
&nbsp; &nbsp;&nbsp;&nbsp;<br />
&nbsp; &nbsp; proxy:new Ext.data.ScriptTagProxy({url:'/xxx/xx.action'}),&nbsp; &nbsp;&nbsp; &nbsp;<br />
&nbsp; &nbsp;&nbsp;&nbsp;<br />
&nbsp; &nbsp; reader:new Ext.data.JsonReader({&nbsp; &nbsp;&nbsp; &nbsp;<br />
&nbsp; &nbsp;&nbsp;&nbsp;<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;totalProperty:'results',&nbsp; &nbsp;&nbsp; &nbsp;<br />
&nbsp; &nbsp;&nbsp;&nbsp;<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;root:'template',&nbsp; &nbsp;&nbsp; &nbsp;<br />
&nbsp; &nbsp;&nbsp;&nbsp;<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;id:'id'&nbsp; &nbsp;&nbsp;&nbsp;<br />
&nbsp; &nbsp;&nbsp;&nbsp;<br />
&nbsp; &nbsp; },Ext.data.Record.create([&nbsp; &nbsp;&nbsp; &nbsp;<br />
&nbsp; &nbsp;&nbsp;&nbsp;<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;{name:'templateid',mapping:'id',type:'int'},&nbsp; &nbsp;&nbsp; &nbsp;<br />
&nbsp; &nbsp;&nbsp;&nbsp;<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;{name:'templatename',mapping:'name'},&nbsp; &nbsp;&nbsp; &nbsp;<br />
&nbsp; &nbsp;&nbsp;&nbsp;<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;{name:'templateuser',mapping:'user'}&nbsp; &nbsp;&nbsp; &nbsp;<br />
&nbsp; &nbsp;&nbsp;&nbsp;<br />
&nbsp; &nbsp; ]))&nbsp; &nbsp;&nbsp; &nbsp;<br />
&nbsp; &nbsp;&nbsp;&nbsp;<br />
});&nbsp; &nbsp;&nbsp; &nbsp;<br />
&nbsp; &nbsp;&nbsp;&nbsp;<br />
store.load({params:{start:0, limit:10}}); <br />
<br />
</code>方法: Store( Object config ) 构造, config定义为... <br />
<br />
{ autoLoad : Boolean/Object,&nbsp; &nbsp; //自动载入&nbsp;&nbsp;<br />
<br />
baseParams : Object,&nbsp; &nbsp; //只有使用httpproxy时才有意义&nbsp;&nbsp;<br />
<br />
data : Array,&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;//数据 <br />
<br />
proxy : Ext.data.DataProxy,//数据代理 <br />
<br />
pruneModifiedRecords : boolean,//清除修改信息 reader : Ext.data.Reader,&nbsp; &nbsp; //数据读取器 <br />
<br />
remoteSort : boolean,&nbsp; &nbsp; //远程排序? <br />
<br />
sortInfo : Object,&nbsp; &nbsp; //{field: "fieldName", direction: "ASC|DESC"}这样的排序对象 <br />
<br />
url : String,&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;//利用url构造HttpProxy <br />
<br />
} <br />
<br />
<br />
<br />
你可以得到一个store 的长度： <br />
<br />
store.data.items.length <br />
<br />
你也可以得到store 中的某个值日。 <br />
<br />
方法是 store.data.item(i).name //name 是字段名称<br />
<br />
<br />
<br />
<code style="border: 1px solid #cccccc; margin: 0pt 1em 1em; padding: 0.5em; display: block; font-family: Courier,monospace; font-style: normal; font-variant: normal; font-weight: normal; font-size: 12px; font-size-adjust: none; font-stretch: normal; line-height: 1.8em;"><br />
</code><br />
<img src ="http://www.blogjava.net/ocean07000814/aggbug/287249.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ocean07000814/" target="_blank">非洲小白脸</a> 2009-07-18 15:02 <a href="http://www.blogjava.net/ocean07000814/articles/287249.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>