• 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”});

  • 相关阅读:
    Codis的源码编译生成tar包
    Jenkins安装war版本
    Eclipse中src/main/resources配置文件启动问题
    关于Web项目的pom文件处理
    spark streaming的理解和应用
    Azkaban安装
    Mysql安装
    Oracle递归操作
    WebService 入门
    BaseAction 类
  • 原文地址:https://www.cnblogs.com/shsgl/p/4344341.html
Copyright © 2020-2023  润新知