`

Record 与 Store 说明

 
阅读更多

1、Record

  首先需要明确是,ExtJS中有一个名为Record的类,表格等控件中使用的数据是存放在Record对象中,一个Record可以理解为关系数据表中的一行,也可以称为记录。Record对象中即包含了记录(行中各列)的定义信息(也就是该记录包含哪些字段,每一个字段的数据类型等),同时又包含了记录具体的数据信息(也就是各个字段的值)。

  我们来看直接使用Record的代码:

Ext.onReady(function(){
         
var MyRecord = Ext.data.Record.create([
             {name: 'title'},
             {name: 'username', mapping: 'author'},
             {name: 'loginTimes', type: '
int'},
             {name: 'lastLoginTime', mapping: 'loginTime', type: 'date'} 
                   ]);
         
var r=new MyRecord({
                   title:
"日志标题",
                   username:
"easyjf",
                   loginTimes:
100,
                   loginTime:
new Date()
         });       
         alert(MyRecord.getField(
"username").mapping);
         alert(MyRecord.getField(
"lastLoginTime").type);
         alert(r.data.username);
         alert(r.get(
"loginTimes"));
 });

 

 

   首先使用Record的create方法创建一个记录集MyRecord,MyRecord其实是一个类,该类包含了记录集的定义信息,可以通过MyRecord来创建包含字段值的Record对象。在上面的代码中,最后的几条语句用来输出记录集的相关信息,MyRecord.getField("username")可以得到记录中username列的字段信息,r.get("loginTimes")可以得到记录loginTimes字段的值,而r.data.username同样能得到记录集中username字段的值。
  对Record有了一定的了解,那么要操作记录集中的数据就非常简单了,比如r.set(name,value)可以设置记录中某指定字段的值,r. dirty可以得到当前记录是否有字段的值被更改过等等。

2Store

Store可以理解为数据存储器,可以理解为客户端的小型数据表,提供缓存等功能。在ExtJS中,GridPanel、ComboBox、DataView等控件一般直接与Store打交道,直接通过store来获得控件中需要展现的数据等。一个Store包含多个Record,同时Store又包含了数据来源,数据解析器等相关信息,Store通过调用具体的数据解析器(DataReader)来解析指定类型或格式的数据(DataProxy),并转换成记录集的形式保存在Store中,作为其它控件的数据输入。
  数据存储器由Ext.data.Store类定义,一个完整的数据存储器要知道数据源(DataProxy)及数据解析方式(DataReader)才能工作,在Ext.data.Store类中数据源由proxy配置属性定义、数据解析(读取)器由reader配置属性定义,一个较为按部就班创建Store的代码如下:

var MyRecord = Ext.data.Record.create([

             {name: 'title'},

             {name: 'username', mapping: 'author'},

             {name: 'loginTimes', type: 'int'},

             {name: 'lastLoginTime', mapping: 'loginTime', type: 'date'} 

                   ]);

         var dataProxy=new Ext.data.HttpProxy({url:"link.ejf"});

         var theReader=new Ext.data.JsonReader({

             totalProperty: "results", 

             root: "rows",              

             id: "id"                   

                   },MyRecord);

         var store=new Ext.data.Store({           

                             proxy:dataProxy,

                             reader:theReader

                   });

         store.load();

  当然,这样的难免代码较多,Store中本身提供了一些快捷创建Store的方式,比如上面的示例代码中可以不用先创建一个HttpProxy,只需要在创建Store的时候指定一个url配置参数,就会自动使用HttpProxy来加载参数。比如,上面的代码可以简化成:

 

var MyRecord = Ext.data.Record.create([

             {name: 'title'},

             {name: 'username', mapping: 'author'},

             {name: 'loginTimes', type: 'int'},

             {name: 'lastLoginTime', mapping: 'loginTime', type: 'date'} 

                   ]);

         var theReader=new Ext.data.JsonReader({

             totalProperty: "results", 

             root: "rows",              

             id: "id"                   

                   },MyRecord);

         var store=new Ext.data.Store({

         url:"link.ejf",

                             proxy:dataProxy,

                             reader:theReader

                   });

         store.load();

  虽然不再需要手动创建HttpProxy了,但是仍然需要创建DataReader等,毕竟还是复杂,ExtJS进一步把这种常用的数据存储器进行了封装,在Store类的基础上提供了SimpleStore、SimpleStore、GroupingStore等,直接使用SimpleStore,则上面的代码可以进一步简化成下面的内容:

var store=new Ext.data.JSonStore({              

                   url:"link.ejf?cmd=list",

                   totalProperty: "results", 

                   root: "rows",

                   fields:['title',   {name: 'username', mapping: 'author'},

             {name: 'loginTimes', type: 'int'},

             {name: 'lastLoginTime', mapping: 'loginTime', type: 'date'} 

                   ]         

         });

         store.load();

 

3DataReader

DataReader表示数据读取器,也就是数据解析器,其负责把从服务器或者内存数组、xml文档中获得的杂乱信息转换成ExtJS中的记录集Record数据对象,并存储到Store里面的记录集数组中。
  数据解析器的基类由Ext.data.DataReader定义,其它具体的数据解析器都是该类的子类,ExtJS中提供了读取二维数组、JSon数据及Xml文档的三种数据解析器,分别用于把内存中的二级数组、JSON格式的数据及XML文档信息解析成记录集。下面简单的介绍:
  1)ArrayReader
Ext.data.ArrayReader-数组解析器,用于读取二维数组中的信息,并转换成记录集Record对象。首先看下面的代码:

var MyRecord = Ext.data.Record.create([

             {name: 'title', mapping:1},

             {name: 'username', mapping:2},

             {name: 'loginTimes', type:3} 

                   ]);

         var myReader = new Ext.data.ArrayReader({

             id: 0           

         }, MyRecord);

  这里定义的myReader可以读取下面的二维数组:

[ [1, '测试', '小王',3], [2, '新年好', 'williamraym',13] ]

  2JsonReader
  Ext.data.JsonReaderJson数据解析器,用于读取JSON格式的数据信息,并转换成记录集Record对象。看下面使用JsonReader的代码:

var MyRecord = Ext.data.Record.create([

             {name: 'title'},

             {name: 'username', mapping: 'author'},

             {name: 'loginTimes', type: 'int'}

                   ]);

         var myReader = new Ext.data.JsonReader({

                   totalProperty: "results", 

         root: "rows",       

          id: "id" 

         }, MyRecord);

  这里的JsonReader可以解析下面的JSON数据:

{ 'results': 2, 'rows': [

    { id: 1, title: '测试', author: '小王', loginTimes: 3 },

    { id: 2, title: 'Ben', author: 'williamraym', loginTimes:13} ]

}

  JSonReader还有比较特殊的用法,就是可以把Store中记录集的配置信息存放直接保存在从服务器端返回的JSON数据中,比如下面的例子:

var myReader = new Ext.data.JsonReader();

 

  这一个不带任何参数的myReader,可以处理从服务器端返回的下面JSON数据:

{

 'metaData': {

    totalProperty: 'results',

    root: 'rows',

    id: 'id',

    fields: [

       {name: 'title'},

             {name: 'username', mapping: 'author'},

         {name: 'loginTimes', type: 'int'} ]

   },

 'results': 2, 'rows': [

    { id: 1, title: '测试', author: '小王', loginTimes: 3 },

    { id: 2, title: '新年好', author: 'williamraym', loginTimes:13}]

}

  3)XmlReader
  Ext.data.XmlReader-XML文档数据解析器,用于把XML文档数据转换成记录集Record对象。看下面的代码:

var MyRecord = Ext.data.Record.create([

             {name: 'title'},

             {name: 'username', mapping: 'author'},

             {name: 'loginTimes', type: 'int'}

                   ]);

         var myReader = new Ext.data.XmlReader({

                   totalRecords: "results", 

         record: "rows",       

                    id: "id" 

         }, MyRecord);

  上面的myReader能够解析下面的xml文档信息:

<topics>  <results>2</results>  <row>    <id>1</id>    <title>测试</ title >    <author>小王</ author >  <loginTimes>3</ loginTimes >  </row>  <row>    <id>2</id>    <title>新年好</ title >    <author> williamraym </ author >  <loginTimes>13</ loginTimes >  </row> </topics>

分享到:
评论

相关推荐

    Ext中Store详解

    - 语法:`store.each(function(record, index, totalRecords){ /* 处理记录 */ });` - 参数说明: - `record`:当前遍历到的数据记录。 - `index`:当前记录在Store中的索引位置。 - `totalRecords`:Store中的...

    ext/和Ajax结合的说明和例子,获得后台数据,很适合大家

    ### ext/与Ajax结合获取后台数据的说明及实例 #### 一、引言 随着Web技术的不断发展,前端框架和Ajax技术的结合越来越普遍。在本文档中,我们将详细介绍如何利用ExtJS(简称ext/)与Ajax技术相结合来实现从前端...

    extjs中form与grid交互数据(record)的方法

    本文将详细介绍如何在Ext JS中实现form与grid的交互操作,以便于数据记录(record)的动态加载和编辑。 首先,Ext JS中的表单Panel和网格Panel都是常用的组件,它们可以用来展示和操作数据。FormPanel用于收集和...

    ExtJs4.1 treegrid CRUD 读取、新增、修改、删除

    实现treegrid组件的(CRUD)读取、新增、修改、删除 ...store.load({node:node}); //异步Ajax提交新增数据 insertdb:function(newrecords) //异步Ajax提交修改数据 updatedb:function(updaterecords)

    Ext.grid.GridPanel属性祥解

    - 说明:将列与数据集中的字段关联起来。 - 示例:`dataIndex: 'name'` 4. **width** - 说明:定义了列的宽度。 5. **align** - 说明:定义了列中数据的对齐方式。 6. **hidden** - 说明:布尔值,决定列...

    J2ME 记录管理存储

    RMS的核心概念是记录存储(Record Store),它是一个包含多个记录的集合。每个记录都是一个字节数组,拥有唯一整数标识符。记录存储是在设备的非易失性存储区域创建的,例如闪存,确保在设备重启或电池更换后数据...

    找到的ExtJS实现多选下拉框3个代码

    我们将基于标题中的“3个代码”来讲解不同的实现方法,并结合提供的资源`demo`进行说明。 1. **ExtJS的MultiSelect ComboBox** 多选下拉框在ExtJS中可以通过扩展ComboBox组件来实现。通常,这需要设置`multiSelect...

    ExtJS增删改查

    接下来,我们通过一个具体的例子来说明如何实现上述四种情况中的第三种情况:页面加载时显示Grid但不查询数据,通过事件触发查询。 ```javascript // 创建数据Store var fds = new Ext.data.Store(); // 创建...

    struts2+extjs中File的upload&download;&delete;例子及说明

    ### Struts2与ExtJS集成实现文件的上传、下载与删除功能详解 #### 一、项目背景与技术栈概述 本案例旨在通过Struts2框架与ExtJS前端库的结合来实现文件的批量上传、下载以及删除功能。适用于对Struts2与ExtJS有...

    Ext JS 4 Architecture

    数据包包括了数据存储(Store)、模型(Model)、代理(Proxy)、记录(Record)等组件,方便数据的加载、保存、同步和验证。 7. **与Sencha Touch的共享(Shared with Sencha Touch)** Ext JS 4和Sencha Touch有...

    Extjs学习开发API

    6. **Ajax与数据通信**:包括Ajax请求的实现、JSONP跨域数据获取、Store与服务器的同步策略等。 7. **扩展与插件**:ExtJS允许开发者创建自定义组件和插件,以满足特定需求。这部分会说明如何创建和使用这些扩展。 ...

    extjs 动态树及中文API

    在中文API中,我们可以找到关于`TreePanel`、`TreeStore`、`NodeInterface`等与树相关的类和接口的说明,以及它们的配置项和方法。 在实际应用中,你可能还需要处理各种交互事件,比如点击节点、展开/折叠节点等。...

    EXP命令:参数_举例_注意事项_问题与解决(整理汇)

    - 示例3说明了如何只导出数据库定义,而不包含实际数据。 - 示例4介绍了导出特定用户所有表、索引和其他对象的方法。 ### 常见问题与解决方案 在导出用户时,即使获得了该用户的所有对象,也无法获得这些对象引用...

    Vs2005+Access+Extjs三层架构源码

    说明:表名大小写与菜单的modulecode填写一致 1、删除文件:Del+表名.js 2、编辑文件:Edit+表名.js 3、列表文件:List+表名.js B、方法、函数、变量命名规则 (1)Store+表名: 提供record对象的存储容器 ...

    Radmin自动登录器v3.0-多国语言绿色版-Release1-20150615

    (1)、RadminM.txt内容说明 登录信息存放在RadminM.txt文件中,若没有会自动创建,密码用RC4加密,请用户注意保管。RadminM.txt是遵循CSV格式的ANSI文本文件,所有字段内容都不能包含英文惊叹号“!”、英文逗号“,...

    Radmin自动登录器v3.0

    (1)、RadminM.txt内容说明 登录信息存放在RadminM.txt文件中,若没有会自动创建,密码用RC4加密,请用户注意保管。RadminM.txt是遵循CSV格式的ANSI文本文件,所有字段内容都不能包含英文惊叹号“!”、英文逗号“,...

    wechats40java源码

    包括如何利用Java ME的API进行网络通信(比如HTTP或Socket)、如何实现UI组件以适应小屏幕显示、如何处理手机的有限内存和CPU性能、以及如何存储和恢复用户数据(可能使用了RMS,Record Management Store,Java ME中...

Global site tag (gtag.js) - Google Analytics