• ExtJS4.2学习(6)——基础知识之proxy篇


    本次讨论下数据代理,其实个人第一次听到这个短语的时候,并不是特别的适应,在英语中的含义是proxy,其实如若大家也觉得不适应的话,就直接称呼proxy吧。

    在ExtJS中,proxy是进行数据读写的主要途径,可以通过proxy操作数据进行增删改查。

    通过网上查阅一些资料得知,proxy共分为两大类,分别如下:

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

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

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

    Ext.data.proxy.SessionStorage 浏览器级别代理----[重点]

    Ext.data.proxy.LocalStorage 本地化的级别代理cookie(不能跨浏览器)----[重点]

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

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

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

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

    一、普通的内存代理示例

    (function(){
    Ext.onReady(function(){
    Ext.regModel("user",{
    fields:[
    {name:'name',type:'string'},
    {name:'age',type:'int'}
    ]
    });
    //不用create方法 我们直接用proxy来创建对象数据
    var userData = [
    {name:abc',age:1},
    {name:'hello',age:26}
    ];
    //创建model的代理类
    var memoryProxy = Ext.create("Ext.data.proxy.Memory",{
    data:userData,
    model:'user'
    })
    userData.push({name:'hi',age:1});
    //update
    memoryProxy.update(new Ext.data.Operation({
    action:'update',
    data:userData
    }),function(result){},this);
    //就可以做增删改查了
    memoryProxy.read(new Ext.data.Operation(),function(result){
    var datas = result.resultSet.records;
    Ext.Array.each(datas,function(model){
    alert(model.get('name'));
    })
    });
    });
    })();

    二、浏览器级别代理(session级别代理)

    (function(){
    Ext.onReady(function(){
    Ext.regModel("user",{
    fields:[
    {name:'name',type:'string'}
    ],
    proxy:{
    type:'sessionstorage',
    id  : 'twitter-Searches'
    }
    });
    //我们用store来初始化数据
    var store = new Ext.data.Store({
    model:user
    });
    store.add({name:'na'});
    store.sync();
    store.load();
    var msg = [];
    store.each(function(rec){
    msg.push(rec.get('name'));
    });
    alert(msg.join("
    "));
    })
    })();

    三、本地化级别代理(local级别代理)

    (function(){
    Ext.onReady(function(){
    Ext.regModel("user",{
    fields:[
    {name:'name',type:'string'}
    ],
    proxy:{
    type:'localstorage',
    id  : 'twitter-Searches'//全局唯一的
    }
    });
    //我们用store来初始化数据
    var store = new Ext.data.Store({
    model:user
    });
    store.add({name:'hello'});
    store.sync();
    store.load();
    var msg = [];
    store.each(function(rec){
    msg.push(rec.get('name'));
    });
    alert(msg.join("
    "));
    })
    })();

    四、异步加载的方式代理(ajax方式代理)

    (function(){
    Ext.onReady(function(){
    Ext.regModel("person",{
    fields:[
    {name:'name',type:'string'}
    ]
    });
    var ajaxProxy = new Ext.data.proxy.Ajax({
    url:'person.jsp',
    model:'person',
    reader:'json',
    limitParam : 'indexLimit'//将键值对的键改掉名称
    });
    ajaxProxy.doRequest(new Ext.data.Operation({
    action:'read',
    limit:10,
    start :1,
    sorters:[
    new Ext.util.Sorter({
    property:'name',
    direction:'ASC'
    })
    ]
    }),function(o){
    var text = o.response.responseText;
    alert(Ext.JSON.decode(text)['name']);//从字符串编程js对象
    });
    });
    })();

    五、跨域交互的代理

    上边也说到跨域是有严重的安全隐患的,ExtJS的跨域需要服务器端相应的配合;

    基本原理是在你的html中写入一段js脚本,src的来源不再是本域,而是跨域的来源,回调的函数是发送过来的函数

    (function(){
    Ext.onReady(function(){
    Ext.regModel("person",{
    fields:[
    {name:'name',type:'string'}
    ],
    proxy:{
    type:'jsonp',
    url:'abc.jsp'
    }
    });
    var person = Ext.ModelManager.getModel('person');
    person.load(1,{
    scope:this,
    success:function(model){
    alert(model.get('name'));
    }
    });
    });
    })();

  • 相关阅读:
    SpringBoot整合Flyway(数据库版本迁移工具)
    Java并发编程实战 05等待-通知机制和活跃性问题
    Java并发编程实战 04死锁了怎么办?
    Java并发编程实战 03互斥锁 解决原子性问题
    Java并发编程实战 02Java如何解决可见性和有序性问题
    Flutter学习笔记(40)--Timer实现短信验证码获取60s倒计时
    Flutter学习笔记(39)--BottomNavigationBar底部item超过3个只显示icon,不显示title
    Flutter学习笔记(38)--自定义控件之组合控件
    Flutter学习笔记(36)--常用内置动画
    Flutter学习笔记(37)--动画曲线Curves 效果
  • 原文地址:https://www.cnblogs.com/sunyingyuan/p/3686278.html
Copyright © 2020-2023  润新知