ExtJs的数据代理proxy

ExtJs的数据代理proxy

 

数据代理proxy是进行数据读写的主要途径,通过代理操作数据进行CRUD ---增删改查

每一步操作全会得到唯一的Ext.data.Operation实例他包含了所有的请求参数

数据代理proxy目录结构

Ext.data.proxy.Proxy 代理类的根类(他分为客户端(Client)代理和服务器代理(Server))

       Ext.data.proxy.Client客户端代理

              Ext.data.proxy.Memory 普通的内存代理 ----[重点]

              Ext.data.proxy.WebStorage浏览器客户端存储代理

                     Ext.data.proxy.SessionStorage浏览器级别代理----[重点]  打开新的浏览器后不记录信息session级别

                     Ext.data.proxy.LocalStorage本地化的级别代理(不能夸浏览器)----[重点] 打开新的浏览器后记录原来信息cookie级别

       Ext.data.proxy.Server服务器端代理

              Ext.data.proxy.Ajax 异步加载的方式----[重点]

                     Ext.data.proxy.Rest一种特使的Ajax--[知道]

              Ext.data.proxy.JsonP 跨域交互的代理----[重点] 跨域是有严重的安全隐患的 extjs的跨域也是需要服务器端坐相应的配合

1.     普通代理 Memory

[javascript] view plaincopy
  1.  (function(){  
  2.      Ext.onReady(function(){  
  3.         //定义user的model类  
  4.         Ext.regModel("user",{  
  5.             fields:[  
  6.                     {name:"name",type:"string"},  
  7.                     {name:"age",type:"int"}  
  8.                    ]  
  9.         });  
  10.         //不用create方法我们直接用proxy来创建对象数据  
  11.         var userdata=[  
  12.                   {name:"hanhan313",age:23},  
  13.                   {name:"ecit",age:2}  
  14.                 ];  
  15.         var memoryProxy=Ext.create("Ext.data.proxy.Memory",{  
  16.             data:userdata,  
  17.             model:"user"  
  18.         });  
  19.         //每一步操作全会得到唯一的Ext.data.Operation实例他包含了所有的请求参数  
  20.         //添加数据  
  21.         userdata.push({name:'newuspcat.com',age:1});  
  22.         //update  
  23.         memoryProxy.update(new Ext.data.Operation({  
  24.             action:'update',   //指明操作的类型为更新  
  25.             data:userdata  
  26.         }),function(result){},this);  
  27.         //遍历  
  28.         memoryProxy.read(new Ext.data.Operation(),function(result){  
  29.             var datas = result.resultSet.records;  
  30.             Ext.Array.each(datas,function(model){  
  31.                 alert(model.get('name'));  
  32.             });  
  33.         });  
  34.      });  
  35. })();  

结果:


2.     浏览器级别代理SessionStorage

[javascript] view plaincopy
  1. //Ext.data.proxy.SessionStorage浏览器级别代理----[重点]   打开新的浏览器后不记录信息session级别  
  2. (function(){  
  3.    Ext.onReady(function(){  
  4.       //定义user的model类  
  5.         Ext.regModel("user",{  
  6.             fields:[  
  7.                     {name:"name",type:"string"}  
  8.                    ],  
  9.             proxy:{  
  10.                 type:"sessionstorage", //代理的方式  
  11.                 id:"localid"           //唯一标示符id  
  12.             }  
  13.         });  
  14.        //使用store初始化数据  
  15.        var store=new Ext.data.Store({  
  16.            //数据模版  
  17.            model:"user"  
  18.        });  
  19.         //添加数据  
  20.         store.add({name:"hanhan313"});  
  21.         store.sync();  //保存数据  
  22.         store.load();  //加载数据  
  23.         var meg=[];  
  24.         store.each(function(rec){  
  25.             meg.push(rec.get("name"));  
  26.         });  
  27.         alert(meg.join(" "));  
  28.    });  
  29. })();  

如果不关闭浏览器多次刷新的结果:


但是关闭浏览器后在浏览结果:


说明是以session的形式保存的

3.     本地化的级别代理LocalStorage

[javascript] view plaincopy
  1. //Ext.data.proxy.LocalStorage本地化的级别代理(不能夸浏览器)----[重点]  打开新的浏览器后记录原来信息  
  2. (function(){  
  3.    Ext.onReady(function(){  
  4.       //定义user的model类  
  5.         Ext.regModel("user",{  
  6.             fields:[  
  7.                     {name:"name",type:"string"}  
  8.                    ],  
  9.             proxy:{  
  10.                 type:"localstorage",  
  11.                 id:"localid"  
  12.             }  
  13.         });  
  14.        //使用store初始化数据  
  15.        var store=new Ext.data.Store({  
  16.            //数据模版  
  17.            model:"user"  
  18.        });  
  19.         //添加数据  
  20.         store.add({name:"hanhan"});  
  21.         store.sync();  //保存数据  
  22.         store.load();  //加载数据  
  23.         var meg=[];  
  24.         store.each(function(rec){  
  25.             meg.push(rec.get("name"));  
  26.         });  
  27.         alert(meg.join(" "));  
  28.    });  
  29. })();  

结果:


 

当关闭浏览器后再次打开访问结果会累加,相当于是以cookie的形式保存的

4.     异步加载的方式Ajax

[javascript] view plaincopy
  1. (function(){  
  2.     Ext.onReady(function(){  
  3.         Ext.regModel("person",{  
  4.             fields:[  
  5.                 {name:'name',type:'string'}  
  6.             ]  
  7.         });  
  8.         //Ext.data.proxy.Ajax 异步加载的方式----  
  9.         var ajaxProxy = new Ext.data.proxy.Ajax({  
  10.             url:'index.jsp',  
  11.             model:'person',           //读取模型  
  12.             reader:'json',               
  13.             limitParam : 'indexLimit'  
  14.         });  
  15.         //代理发送请求  
  16.         ajaxProxy.doRequest(new Ext.data.Operation({  
  17.                 action:'read',  
  18.                 limit:10,  //分页的条数  
  19.                 start :1,  //从第一页开始查,limit和start会以两个参数向服务器发送  
  20.                 sorters:[  
  21.                     new Ext.util.Sorter({  
  22.                         property:'name',   //排序的属性  
  23.                         direction:'ASC'    //排序的方式  
  24.                     })  
  25.                 ]  
  26.             }),function(o){  
  27.             var text = o.response.responseText;  
  28.             alert(text);  
  29.             alert(Ext.JSON.decode(text)['name']);  //使用decode编码后获取数据  
  30.         });  
  31.     });  
  32. })();  

index.jsp:

<%

response.getWriter().write("{name:'hanhan313',age:26,email:'605474293@qq.com'}");

%>

结果:


5.     跨域交互的代理JsonP

[javascript] view plaincopy
  1. (function(){  
  2.     Ext.onReady(function(){  
  3.         Ext.regModel("person",{  
  4.             fields:[  
  5.                 {name:'name',type:'string'}  
  6.             ],  
  7.             proxy:{  
  8.                 type:'jsonp',  
  9.                 url:'http://www.uspcat.com/extjs/person.php'  
  10.             }  
  11.         });  
  12.         var person = Ext.ModelManager.getModel('person');  
  13.         person.load(1,{  
  14.             scope:this,  
  15.             success:function(model){  
  16.                 alert(model.get('name'));  
  17.             }  
  18.         });  
  19.     })  
  20. })();  

person.php:

echo Ext.data.Jsonp.callback1({name:”hanhan313”});

原文地址:https://www.cnblogs.com/shsgl/p/4344341.html