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("\n"));
})
})();

三、本地化级别代理(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("\n"));
})
})();

四、异步加载的方式代理(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'));
}
});
});
})();

转载于:https://www.cnblogs.com/sunyingyuan/p/3686278.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值