extjs 数据存储和提交

extjs深入浅出学习笔记

一、ajax提交的实现方式。

1)Ext.data.Connection

继承自Ext.lib.Ajax

必须new 的方式实现

  var conn = new Ext.data.Connection({
        autoAbort: false,
        defaultHeaders: {
            referer: 'http://localhost/ext/extbook-sample/'
        },
        disableCaching : false,
        extraParams : {
            name: 'name'
        },
        method : 'GET',
        timeout : 300,
        url : '01.txt'
    });
    conn.request({
        success: function(response) {
            Ext.Msg.alert('info', response.responseText);
        },
        failure: function() {
            Ext.Msg.alert('warn', 'failure');
        }
    });

 

2)Ext.Ajax.request

继承自Ext.data.Connection 的比较多的方式。

Ext.Ajax.request({ 
    url: '07-01.txt', 
    success: function(response) { 
        Ext.Msg.alert('成功', response.responseText); 
    }, 
    failure: function(response) { 
        Ext.Msg.alert('失败', response.responseText); 
    }, 
    params: { name: 'value' } 
}); 
url:比较的路径
 
success:提交成功和失败的闲应方法。
 
params: 提交的参数,可以是json数据,或者是Array数据格式。
 
对比Ext.data.Connection 不需要new实现。
 
下面一句话是原文,不理解。。。
 

Connection是为了给Ext.data中的各种proxy提供Ajax功能,分配不同的实例更有利于分别管
理。Ext.Ajax为用户提供了一个简易的调用接口


3)Ext.lib.Ajax

最低层的实现

 

Ext.lib.Ajax.request( 
    'POST', 
    '07-01txt', 
    {success: function(response){ 
        Ext.Msg.alert('成功', response.responseText); 
    },failure: function(){ 
        Ext.Msg.alert('失败', response.responseText); 
    }}, 
    'data=' + encodeURIComponent(Ext.encode({name:'value'})) 
);   

和Ext.ajax.request的区别是, 这里的参数是有顺序的。而且,提交的参数只能是array的格式。

比与Ext.Ajax相比,Ext.lib.Ajax的唯一优势就是它可以在EXT 1.x中使用。

 

二、extjs中的Data

 

1) Ext.data.Record 与 Ext.data.store

Ext.data.Record就是一个设定了内部数据类型的对象, 它是Ext.data.Store的最基本组
成部分。如果把Ext.data.Store看作是一张二维表,那么它的每一行就对应一个Ext.data.
Record实例。

Ext.data.Record.create可以创建不同的数据类型,就像我们的class。

var PersonRecord = Ext.data.Record.create([ 
    {name: 'name', type: 'string'}, 
    {name: 'sex', type: 'int'} 
]); 


PersonRecord就是一个class,

我们可以

var boy = new PersonRecord({
    name: 'boy',
    sex: 0
});

得到一个对象,也就是一个Record

得到Record中的数据方式  boy.data[‘name’];  boy.get(‘name’); 修改数据boy.set(‘name’,’jony’);也可以直接boy.data

[‘name’]=”jony”但是直接修改不能回滚。boy.commit()提交数据.boy.reject() 回滚。。

 

 

Ext.data.Store是EXT中用来进行数据交换和数据交互的标准中间件,无论是Grid还是。ComboBox,都是通过它实现数据读取、类型

转换、排序分页和搜索等操作的。


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();

每个store最少需要两个组件的支持,分别是proxy和reader,proxy用于从某个途径读取始数据,reader用于将原始数据转换成

Record实例。 上面代码中 PersonRecord就是类型。data就是数据


一个store中有多个record。 store和record是聚合的关系。

 

2)Ext.data.Store 的proxy和reader

 

A)Proxy

MemoryProxy:   只能从JavaScript对象获得数据,可以直接把数组,或JSON和XML格式的数
交给它处理,如下面的代码所示。

使用方法:

var proxy = new Ext.data.MemoryProxy([
    ['id1','name1','descn1'],
    ['id2','name2','descn2']
]);   

如果给定了url则是HttpProxy。            

HttpProxy:HttpProxy使用HTTP协议,通过Ajax去后台取数据,构造它时需要设置url:'xxx.jsp'请注意,这里的HttpProxy不支持跨域

使用方法:var proxy = new Ext.data.HttpProxy({url:'xxx.jsp'});

后台代码:

response.setContentType("application/x-json");
Writer out = response.getWriter(); 
out.print("[" + 
        "['id1','name1','descn1']" + 
        "['id2','name2','descn2']" + 
    "]");                 

 

ScriptTagProxy :ScriptTagProxy的用法几乎和HttpProxy一样,

后台代码:

String cb = request.getParameter("callback"); 
response.setContentType("text/javascript"); 
Writer out = response.getWriter(); 
out.write(cb + "("); 
out.print("[" + 
        "['id1','name1','descn1']" + 
        "['id2','name2','descn2']" + 
    "]"); 

out.write(");");

 
 

其中的关键就在于从请求中获得的callback参数,这个参数叫做回调函数。ScriptTag- Proxy会在当前的HTML页面里添加一个

<scripttype="text/javascript"src="xxx.jsp"> </script>标签,然后把后台返回的内容添加到这个标签中,这样就可以解决跨域访

问数据的问题。。


 

B)Reader

JsonReader: JSON是一种非常重要的数据格式,key:value,  与数组相比,JSON的最大优点就是支持分页,

var data = { 
    id:0, 
    totalProperty:2, 
    successProperty:true, 
    root:[ 
        {id:'id1',name:'name1',descn:'descn1',person:{
       id:1,name:'man',sex:'male' 
        }}, 
        {id:'id2',name:'name2',descn:'descn2',person:{ 
            id:2,name:'woman',sex:'female' 
        }} 
    ] 
}; 
var reader = new Ext.data.JsonReader({ 
    successProperty: "successproperty", 
    totalProperty: "totalProperty", 
    root: "root", 
    id: "id" 
}, [ 
    'id','name','descn', 
    {name:'person_name',mapping:'person.name'}, 
    {name:'person_sex',mapping:'person.sex'} 
]);

 


 

ArrayReader :ArrayReader的作用是从二维数组里依次读取数据,然后生成对应的Record.缺点是不支持分页

var reader = new Ext.data.ArrayReader({ 
    id:1 
},[ 
    {name:'name',mapping:1}, 
    {name:'descn',mapping:2}, 
    {name:'id',mapping:0}, 
]);
 
 

XmlReader

 

 

 

实际开发时,并不需要每次都对proxy、reader、store这三个对象进行配置,EXT为我们
提供了几种可选择的整合方案。

 

SimpleStore = Store + MemoryProxy + ArrayReader

  var ds = Ext.data.SimpleStore({ 
      data: [ 
            ['id1','name1','descn1'], 
            ['id2','name2','descn2'] 
      ], 
      fields: ['id','name','descn'] 
 });

JsonStore = Store + HttpProxy + JsonReader

 

  var ds = Ext.data.JsonStore({ 
      url: 'xxx.jsp', 
      root: 'root', 
      fields: ['id','name','descn'] 
 }); 

 

Ext.data.GroupingStore对数据进行分组

  var ds = new Ext.data.GroupingStore({ 
      data: [ 
          ['id1','name1','female','descn1'], 
          ['id2','name2','male','descn2'], 
          ['id3','name3','female','descn3'], 
          ['id4','name4','male','descn4'], 
          ['id5','name5','female','descn5'] 
      ], 
      reader: new Ext.data.ArrayReader({ 
          fields: ['id','name','sex','descn']        }), 
       groupField: 'sex', 
       groupOnSort: true 
   }); 

转载于:https://www.cnblogs.com/phpzxh/archive/2010/03/19/1689928.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值