该项目基于.net2.0+Extjs来实现,具体的架构以后会慢慢贴出,这里只是简单介绍一下Ext.data库中几个常用的类的实现原理和使用.
Ext.data 库主要包括以下几个类:
Ext.data.Store ==>DataSet
Ext.data.Record ==>DataSet.Row
Ext.data.DataProxy ==>SqlConnection
Ext.data.DataReader ==>SqlDataAdapter
以下分别进行介绍:
1.Ext.data.Record
可以用来定义一行数据的格式,它有几个重要的属性和方法:
data:实际的数据
modified:如果dirty==true 这modified中存放的是修改前的数据否则为空
e.g:
if(dirty){var a = modified['Name']};
构造函数:
Record(Array data
, [Object id
])
e.g:
var a = new Ext.data.Record([
{name:'Name'},
{name:'Address'}
],{id:'Name'}) ;
其中第2个参数可以不写
等价于
var a = Ext.data.Record.create([
{name:'Name'},
{name:'Address'}
],{id:'Name'}) ;
生成一行实际数据
var record = new a({
Name:'test',
Address:'where'
});
Ext.Msg.alert('test',record.get('Name')) 输出:'test'
Ext.Msg.alert('test',record.data.Name)输出:'test'
定义好行的格式之后我们就可以生成DataProxy去获取数据
DataProxy 分为3种,我们主要使用其中的2种MemoryProxy 和HttpProxy,其中最重要的方法:
load(Object params
, Ext.data.DataReader reader
, Function callback
, Object scope
, Object arg
) : void
MemoryProxy(Object data
)
e.g:
MemoryProxy只可以识别数据对象的数据格式如下:
var data = [['tt','shenzhen'],['tt2','shenzhen']];
定义reader 可以又多种方法:
1.var reader= new Ext.data.ArrayReader({id:'Name'},r);
2.var reader= new Ext.data.ArrayReader({id:'Name',fields:['Name','Address']});
一般使用第2种方法,因为代码量少
DataReader ,ArrayReader ,JsonReader 的继承关系如下:
JsonReader 继承DataReader ,ArrayReader 继承JsonReader ,ArrayReader 于JsonReader 唯一的区别就是readRecords方法的实现不一样;
下面就着源码讲解一下为什么DataReader 可以用多种方法去生成
DataReader:
Ext.data.DataReader = function(meta, recordType){
/**
* This DataReader's configured metadata as passed to the constructor.
* @type Mixed
* @property meta
*/
this.meta = meta;
this.recordType = Ext.isArray(recordType) ?
Ext.data.Record.create(recordType) : recordType;
};
---------------------------------------------------------
JsonReader:
Ext.data.JsonReader = function(meta, recordType){
meta = meta || {};
Ext.data.JsonReader.superclass.constructor.call(this, meta, recordType || meta.fields);
};
JsonReader 的构造函数中调用了DataReader的构造函数就是我用黄颜色标记的地方,如果JsonReader 的Config对象中提供了fields属性则调用的方法如下:
DataReader(meta,meta.fields);
否则就只能只用使用原来Ext.data.Record.create()生成的对象去初始化DataReader(meta,r.prototype.fields);
var proxy = new Ext.data.MemoryProxy(data);
proxy.load(null,reader,callback,this,{req:'123'});
function callback(Records,arg,bFlag){alert(Records.records[0].get('Name'))} 输出:'tt';
proxy的load 方法中调用了reader.readerRecords(data)来读取数据
结果就是callback函数中的Records{records:[],recordsCount}:records为读出的数据的数据对
象,recordsCount表示记录的行数;
当然也可以生成一个JsonReader 对象来读取数据
e.g:
var jsonReader = new Ext.data.JsonReader({
id:'Name',
root:'data',
totalProperty:'totalCount',
fields:['Name','Address']
});
var jsonData={
'totalCount':2,
'data':[
{'Name':'tt','Address':'shenzhen'},
{'Name':'tt1','Address':'shenzhen'}
]
};
var proxy = new Ext.data.MemoryProxy(jsonData);
proxy.load(null,reader,callback,this,{req:'123'});
function callback(Records,arg,bFlag){alert(Records.records[0].get('Name'))} 输出:'tt';
Ext.data库中最重要的就是Ext.data.Store ,它可以为Ext.grid.GridPanel ,Ext.form.Combox ...提供数据源
有2种Store都继承自Ext.data.Store:Ext.data.JsonStore 和Ext.data.SimpleStore
Ext.data.JsonReader 对应 Ext.data.JsonReader ;Ext.data.SimpleStore 对应 Ext.data.ArrayReader
Ext.data.Store的主要Config属性有:
url:请求数据的Url地址;
data:直接提供的数据源;
proxy:Ext.data.DataProxy(从哪里取数据);
reader:Ext.data.DataReader(取什么样的数据);
baseParams:请求时要附加的参数:{req:'123'};
以上的配置属性之间有一些联系,主要表现在url和proxy上面
现在讲解一下store中各个对象的生成关系和顺序:
1.初始化baseParams:{start:,limit:sort:dir:}
2.判断有没有直接传入数据集合==>config.data==null ;this.inlineData = data;
3.config.url !=null 同时config.proxy没有数值
就用config 的url直接生成一个this.proxy=HttpProxy();
this.proxy在后面的load()函数中会使用到,这就是为什么有时我们在配置store的时候提供了config.data 和config.reader,而没有提供config.proxy就会报错的原因
因为在load()函数中会调用Ext.data.DataProxy.load()方法
4.判断是否提供了config.reader,生成this.recordType 和this.fields
JsonStore 的构造函数源码如下:
Ext.data.JsonStore = function(c){
/**
* @cfg {Ext.data.DataReader} reader @hide
*/
/**
* @cfg {Ext.data.DataProxy} proxy @hide
*/
Ext.data.JsonStore.superclass.constructor.call(this, Ext.apply(c, {
proxy: c.proxy || (!c.data ? new Ext.data.HttpProxy({url: c.url}) : undefined),
reader: new Ext.data.JsonReader(c, c.fields)
}));
};
生成原理:
1.调用Ext.data.Store的构造函数,其中我标为黄色的语句表达的意思就是:如果提供了proxy配置属性就使用当前配置的Proxy去获取数据,没有提供则判断是否有直接数据源提供,没有则用
url配置属性去生成一个HttpProxy去获取数据,绿色语句是生成Ext.data.DataReader对象,在Store 的Load()方法会使用他去读取数据;
在这里顺便介绍一下在源码中使用最多的一种语句 (c = a||b )== (c=a==undefinde ? b:a)
---------------------------------------------------------------------
SimpleStore 的构造函数源码如下:
Ext.data.SimpleStore = function(config){
Ext.data.SimpleStore.superclass.constructor.call(this, Ext.apply(config, {
reader: new Ext.data.ArrayReader({
id: config.id
},
Ext.data.Record.create(config.fields)
)
}));
};
SimpleStore的生成原理与JsonStore大体一致,
在以上的2段代码中都要注意到的是config.fields配置属性,他们都被用来去生成Ext.data.Record对象;
现在举几个生成Store对象的例子
1.
var data =[['tt','shenzhen'],['tt2','shenzhen']];
var store = new Ext.data.SimpleStore({
data:data,
fields:['Name','Address']
});
2.
var jsonData={
'totalCount':2,
'data':[
{'Name':'tt','Address':'shenzhen'},
{'Name':'tt1','Address':'shenzhen'}
]
};
var store = new Ext.data.JsonStore({
data:jsonData,
fields:['Name','Address'],
id:'Name',
root:'data',
totalProperty:'totalCount'
});
3.
var store = new Ext.data.JsonStore({
URL:
fields:['Name','Address'],
id:'Name',
root:'data',
totalProperty:'totalCount'
});
其中以第3中方法使用最为广泛.
分享到:
相关推荐
Ext.data.Store的基本用法 Ext.data.Store的基本用法 Ext.data.Store的基本用法
环境:Window XP Sp2、Tomcat 6.0、...关于Ext.data.Store类,我们可以看出:该框架提供了客户端缓存的功能--这对于我们框架系统是非常有帮助的。本示例代码注释非常详细。 阅读对象:需要使用Ext框架进行Web开发的人员
Ext.data 在命名空间中定义了一系列store、reader 和proxy。Grid 和ComboxBox 都是以Ext.data 为 媒介获取数据的,它包含异步加载、类型转换、分页等功能。Ext.data 默认支持Array、JSON、XML 等 数据格式,可以通过...
Ext.3.0.中文Ext.3.0.中文Ext.3.0.中文Ext.3.0.中文Ext.3.0.中文Ext.3.0.中文Ext.3.0.中文Ext.3.0.中文
1. Ext.form.NumberField 2. Ext.form.TextArea 3. Ext.form.TriggerField 4. Ext.form.DateField 5. Ext.form.ComboBox 6. Ext.form.TimeField
EXT.JS_文档EXT.JS_文档EXT.JS_文档EXT.JS_文档EXT.JS_文档EXT.JS_文档EXT.JS_文档EXT.JS_文档EXT.JS_文档EXT.JS_文档EXT.JS_文档EXT.JS_文档EXT.JS_文档EXT.JS_文档EXT.JS_文档EXT.JS_文档EXT.JS_文档EXT.JS_文档...
关于这个原因有很多种,我只说下我遇到的 我这样 写Store来复用的 代码如下: DocStore = Ext.extend(Ext.data.Store,{ initComponent:function(){ this.proxy = new Ext.data.HttpProxy({url:this.url}); this....
var reader = new Ext.data.JsonReader({totalProperty:'totalProperty',root:'root'},record); store = new Ext.data.Store({ proxy:proxy, reader:reader }); //尾 分页 var pagebar = new Ext....
NULL 博文链接:https://kejiangwei.iteye.com/blog/429617
org.restlet.ext.spring.jar
29、Ext.data.MemoryProxy类 ……… 25 30、Ext.data.ScriptTagProxy类 ………… 25 31、Ext.data.DataReader类 ……………26 32、Ext.data.ArrayReader类 …………… 26 33、Ext.data.JsonReader类 …………… 26 ...
7.3.4 格式化提交数据:ext.data.writer.writer、ext.data.writer.json和ext.data. writer.xml / 322 7.3.5 writer对象的配置项 / 325 7.4 数据模型 / 326 7.4.1 概述 / 326 7.4.2 数据类型及排序类型:ext....
extjs多选下拉框,Ext.ux.form.LovCombo,extjs 以修复多选下拉框火狐下取不到值的问题,火狐下div不显示背景色的问题
EXT dojoChina按钮控件示例 Ext.Button.rarEXT dojoChina按钮控件示例 Ext.Button.rarEXT dojoChina按钮控件示例 Ext.Button.rarEXT dojoChina按钮控件示例 Ext.Button.rar
Ext.js 3.0中文API和Ext.js中文教程打包下载
运行Microsoft office时,vbe6ext.olb不能加载
com.noelios.restlet.ext.servlet_2.4.jar
Ext.get与Ext.fly的区别与用法
Most configuration options are inherited from Ext.Window (see ExtJs docs). The added ones are: url - the url where to post uploaded files. base_params - additional post params (default to {}). ...
org.restlet.ext.servlet-2.1.1.jar