第一,让我们了解一样EXTJS数据存储框架是什么样子的。
大家对于Ext.data.Store不陌生吧,现在网上大大小小免费的、或是收费的教程,大多会经常出个这个Store.这个就是EXTJS的数据存储器。他负责管理与存储数据。
Ext.data.Record,大家也不应该陌生,他是一个存储数据的记录,类似于表中的“行记录”,Store里面的基本数据单元对象就是Record。
那Store是如何对于Record进行管理呢?首先,我们得解决第一个问题,如果实例化一个Record对象?
官方的推荐初始化方式有两种:
1、var _rs = new Ext.data.Record(["name" , "sex"]) ;//定义两个字段名,分别是name、sex
_rs.set("name" , "陈治文");//设置name为"陈治文"
_rs.set("sex" , "男");//设置sex为"男"
注:这种写法,一目了然,但是,太过冗长。
2、var _rs = new Ext.data.Record({
name:"陈治文",
sex:"男"
}) ;
注:这种写法,是我推荐的写法,很简结。
好第一个问题解决了,那么我们如何初始化一个Store呢?很简单,一句话
var _store = new Ext.data.Store() ;
我们继续,将上面的Record添加进Store
var _store = new Ext.data.Store() ;
_store.add(new Ext.data.Record({
name:"陈治文",
sex:"男"
})) ;
好!OK了,一条记录已经添加进Store
这写法方便、实用,但是需要添加一组数据怎么办呢?这就需要引入另外一个概念Ext.data.Reader,这里的Reader功能非常单一,只是用来解析数据的。大家在文章开始时,就应该体会到,EXTJS支持不同的数据格式,也就需要不同的数据解析器。而这个Reader就是承担解析器的作用。
那我们就看一看,不同的解析器,能够解析哪些数据格式。在解析之前,还有一点需要说明一下,Store里面组织Record是通过集合形式组织的,体现为JavaScript的Array(注:Javascript没有集合类,所有的集合形式是都是数组实现的),而解析器的作用是把一组数据解析成一个个的Record。
1、数组形式数据解析(特殊的JSON形式数据,因此,ArrayReader是JsonReader的子类)
var _store = new Ext.data.Store({
data:[["陈治文" , "男"] , ["张妍娜" , "女"]],
reader:new Ext.data.ArrayReader({
},Ext.data.Record.create(["name" , "sex"]))
}) ;
解析器为ArrayReader,分别解析["陈治文" , "男"] 和["张妍娜" , "女"],将其转换成Ext.data.Record。
2、JSON形式数据
var _store = new Ext.data.Store({
data:[{name:"陈治文" , sex:"男"} , {name:"张妍娜" , sex:"女"}],
reader:new Ext.data.JsonReader({
} , Ext.data.Record.create(["name" , "sex"]))
}) ;
alert(_store.getCount()) ;
JsonReader分别解析{name:"陈治文" , sex:"男"}和{name:"张妍娜" , sex:"女"},将这些数据解析成Ext.data.Record类型数据
3、XML形式数据
这里的有个地方比较麻烦,首先,我们必须得构建一个XMLDocument,这样才能形成XML数据,我们这里所讲的是ASPServer的XML组织形式
var _xml = new XML("<table><row><name>陈治文</name><sex>男</sex></row><row><name>张妍娜</name><sex>女</sex></row></table>") ;
这样,就是构建一个XML对象,通过_xml.getValue()得到xmldocument原型
再者,我们还有需要引入一个新型概念——数据代理Ext.data.DataProxy,数据代理的作用就是通过一定的方式来获得数据,目前EXTJS提供三种方式获得数据:内存传入、HTTP传入、跨域传入。我这里所讲是内存传入Ext.data.MemoryProxy
var _store = new Ext.data.Store({
proxy:new Ext.data.MemoryProxy(_xml.getValue()) ,
reader:new Ext.data.XmlReader({
record:"row"
},Ext.data.Record.create(["name" , "sex"]))
}) ;
_store.on("load" , function(_store){
alert(_store.getAt(0).getCount()) ;
}) ;
_store.load() ;
由于当时,使用了数据代理,需要一个显式调用载入方法,因此,我们通过一个load事件,来获得载入后Store内部所包含Record的总量
刚才所讲,已经将EXTJS能够解析的数据形成都讲一遍,但是,在我们大多数的应用中,我们的数据是来自服务器端,而不是客户端本身。其实在上面讲解XML数据解析时,我已经讲到,这样的要求,需要通过数据代理来实现。
1、通过Ext.data.HttpProxy来实现XML的远程访问
来自http://localhost/document/server/app/console.asp的数据返回
<?xml version="1.0" encoding="GB2312"?>
<table>
<row>
<name><![CDATA[陈治文]]></name>
<sex><![CDATA[男]]></sex>
</row>
<row>
<name><![CDATA[张妍娜]]></name>
<sex><![CDATA[女]]></sex>
</row>
</table>
客户端程序
var _store = new Ext.data.Store({
proxy:new Ext.data.HttpProxy({
url:"http://localhost/document/server/app/console.asp"
}),
reader:new Ext.data.XmlReader({
record:"row"
} , Ext.data.Record.create(["name" , "sex"]))
}) ;
_store.on("load" , function(_store){
alert(_store.getAt(0).get("name")) ;
}) ;
_store.load() ;
2、通过Ext.data.HttpProxy来实现JSON的远程访问
JSON的结构,基本上与XML差不多,XML讲究节点集,而JSON研究数组集
来自http://localhost/document/server/app/console.asp的数据返回
[{name:"陈治文" , sex:"男"},{name:"张妍娜" , sex:"女"}]
客户端程序
var _store = new Ext.data.Store({
proxy:new Ext.data.HttpProxy({
url:"http://localhost/document/server/app/console.asp"
}),
reader:new Ext.data.JsonReader({
} , Ext.data.Record.create(["name" , "sex"]))
}) ;
_store.on("load" , function(_store){
alert(_store.getCount()) ;
}) ;
_store.load() ;
好,这样也就可以了,与XML的解析十分相似
3、跨域数据代理数据传入
这块内容很特殊,即当前客户端所访问的服务器端,并不是与当前客户端所处一域的服务器端,如果你使用HttpProxy,会出现“没有权限”的错误信息,这也是“同源策略”的AJAX安全策略,为了得到跨域数据访问,EXTJS提供了Ext.data.ScriptTagProxy来解决这个问题,其它的,与其它数据代理没有什么两样。
介绍到这里,大家已经到EXTJS数据存储有了一个全新的认识了吧,当然,这个介绍仍然很简单,我将在教程10、11,以及以后的关于FormPanel与GridPanel反复提及这些概念,使得大家充分利用EXTJS数据存储的优越特性。
分享到:
相关推荐
Ext数据模型中的Store是EXT框架中非常核心的一个概念,它是数据管理的主要接口,负责存储和管理数据集。Store内部使用了`Ext.util.MixedCollection`数据结构,这使得它可以同时作为映射和列表来操作数据,并在数据...
数据模型负责存储和管理数据,而视图则负责渲染这些数据到用户界面。EXT Grid通常使用Store对象来处理数据模型,Store可以连接到各种数据源,如JSON、XML或者远程API,通过Ajax请求加载数据。 1. 数据绑定(Data ...
《深入浅出Ext_JS:数据存储与传输》 在Web应用开发中,数据的存储与传输是核心环节,尤其在富客户端(Rich Internet Application, RIA)开发中,JavaScript库Ext JS提供了强大的数据管理功能。本文将围绕Ext JS的...
首先,我们需要创建两个EXT Grid实例,每个Grid都有自己的DataStore,存储各自的数据。DataStore通常与XML或者JSON数据源连接,可以动态加载和更新数据。在Grid中,我们可以通过配置ColumnModel来定义显示的列。 ...
数据存储(Store)是EXT中负责管理和加载数据的组件。在Treepanel的例子中,我们需要一个能处理树形结构数据的TreeStore。配置包括URL(用于远程数据加载)和model(定义数据字段): ```javascript var ...
本示例主要关注的是如何利用Ext.Net实现存储过程分页,以提高应用程序的性能,特别是处理大量数据时。这种技术允许仅加载当前所需的页面数据,从而减少了网络传输的数据量,提高了用户体验。 首先,我们来理解...
例如,它可能包含对EXT Grid、EXT Form、EXT Chart等组件的深度定制支持,以及对EXT数据存储和远程通信API的直观配置选项。 在提供的文件“appengine-java-sdk-1.2.0”中,我们可以推测这可能是Google App Engine的...
在Ext.js中,`Ext.Store`是用来管理数据的类,它通常与各种UI组件(如Grid、ComboBox等)关联,用于存储和检索数据。然而,获取`Ext.Store`的方式并不像获取其他Ext组件那样直接,因为Store并不是一个具有可视界面的...
5. **Ext.data.Store**:Store是用来存储数据的容器,它可以与表单联动。在动态加载数据时,我们可以创建一个Store,然后将JSON数据加载到Store中,再将Store绑定到表单。 6. **Ext.form.Basic**:每个表单都包含一...
2. **数据源(Store)**: Store是EXT JS中管理数据的组件,它负责加载、存储和操作数据。Grid与Store绑定,以便显示和更新数据。通常,Store会连接到一个服务器端的数据接口,如JSON或XML。 3. **列模型(Column ...
在EXT JS这个强大的JavaScript库中,树形组件...总的来说,EXT树的无限级JSON动态加载涉及数据结构、JSON格式、数据存储以及异步加载等多个方面,理解并熟练运用这些技术,能够帮助我们构建更加高效和灵活的树形界面。
`TreeStore`用于存储和管理树结构数据,而`TreeNode`则是树中的每一个节点。 例如: ```javascript var treePanel = Ext.create('Ext.tree.Panel', { title: '动态加载树数据', width: 400, height: 300, store...
- extent树是EXT4文件系统中存储文件保存位置的方式,与EXT3使用的传统块映射方式不同,采用了更高效的存储结构。 - 针对extent树的研究是数据恢复的关键,文件被删除后,extent树的结构会有相应变化,了解这些...
例如,对AJAX请求进行了优化,增强了数据存储和模型的处理能力,同时扩展了布局选项,使得开发者能更灵活地设计用户界面。EXT3.0还加强了对不同浏览器的兼容性,使得应用程序能在多种浏览器环境下稳定运行。 EXT3....
### Ext中grid多行数据全部删除 在前端开发过程中,我们经常会遇到需要处理表格数据的情况。其中,ExtJS是一个非常强大的JavaScript框架,它提供了一系列工具和组件来帮助开发者快速构建复杂的用户界面。本文将详细...
5. **递归拷贝**: 在需要备份或迁移数据时,用户可以使用Ext2Read进行递归拷贝,一次性复制整个目录及其子目录的内容,这对于数据迁移非常方便。 **使用方法** 1. 下载并安装Ext2Read,注意提供的压缩包文件名为`...
"EXT核心API"则深入介绍了EXT的内部机制和主要类库,包括Store(数据存储)、Model(数据模型)、Controller(控制器)以及Ext.application(应用入口)等。理解这些API是提升EXT开发技能的关键。例如,Store负责...
这些数据可以来自本地存储或远程服务器。对于远程数据,通常会使用Ajax请求(DWR或者Ext.Ajax)从服务器获取JSON或XML格式的数据。 更新(Update):当用户修改了数据,Store会自动检测到这些变化。调用`sync()`...
创建了一个名为`xmlStore`的数据存储,它使用了Ajax代理来请求指定URL(这里假设为`resource_getXml.action`)的数据。同时配置了XML数据读取器,用于解析返回的XML数据。 3. **检测加载状态**: ```javascript ...