/**
* http://extjs.com/forum/showthread.php?t=19529
*/
/*
* 作者:彭仁夔 blog:http://jxnuprk.cnblogs.com/或jljlpch.iteye.com
*/
Ext.namespace("Ext.ux.data");
Ext.ux.data.DWRProxy = function(config) {
Ext.apply(this, config);
if (!this.dwrFn)
alert("you must give the dwrFn to run!");
this.dwrlen = this.dwrFn.toString()/* 取得函数参数 长度 */
.match(/^[\s\(]*function[^(]*\((.*?)\)/)[1].split(",").length - 1;
if (!this.limitPos)
this.limitPos = this.dwrlen - 1;
if (!this.startPos)
this.startPos = this.dwrlen - 2;
if (!this.sortPos)
this.sortPos = this.dwrlen - 3;
Ext.ux.data.DWRProxy.superclass.constructor.call(this);
};
Ext.extend(Ext.ux.data.DWRProxy, Ext.data.DataProxy, {
re : /start|limit|sort|dir/,
noPage : false,
noSort : true,
sort : '',
dir : "",
start : 0,
limit : 10,
load : function(params, reader, loadCallback, scope, arg) {
var l = this.dwrlen, dwrFnArgs = [], flag, t = {};
// 隔离短的请求时可能会引起的冲突
for (var p in this)
t[p] = this[p];
if (t.fireEvent("beforeload", t, params) !== false) {
var loadArgs = params['dwrFnArgs'] || params;
if (loadArgs instanceof Array) {/* 通过数组传入参数 */
for (var i = 0;i < loadArgs.length; i++) {
dwrFnArgs[i] = loadArgs[i];
}
} else {
for (var n in loadArgs) {/* 通过对象传入参数 */
if (t.re.exec(n)) {
flag = true;
t[n] = loadArgs[n];
} else {
dwrFnArgs.push(loadArgs[n]);
}
}
}
// 如果已经取得start,limit,sort等参数就不重复
if (!flag)
for (var p in params) {
if (t.re.exec(p))
t[p] = params[p];
}
// 主要针对于分页时出现的问题
if (!dwrFnArgs.length) {/* 没有传入参数(不包含分页等) */
if (t.initParams)/* 看看有没有初始化参数 */
dwrFnArgs = t.initParams;
else if (t.lastOptions) /* 看看上次成功的参数 */
dwrFnArgs = t.lastOptions;
}
var l = t.dwrlen, l2 = dwrFnArgs.length;
// 对不足位的补undefined,如果java中是基本类型,int,float就会出现错误
for (var i = l2 - 1;i < l; i++) {
dwrFnArgs.push(undefined);
}
// 默认是采用分页,采用
if (!t.noPage) {
dwrFnArgs[t.startPos] = t.start;
// 这里是为了防止分页时出现NAN值
params.start = t.start;
dwrFnArgs[t.limitPos] = t.limit;
params.limit = t.limit;
}
if (!t.noSort) {
var s = t.sort + " " + t.dir
dwrFnArgs[t.noPage ? l - 1 : t.sortPos] = s;
}
var cb = function(response) {
alert("success!");
t.lastOptions = dwrFnArgs;
var records = reader.readRecords(response);
t.fireEvent("load", t, response, loadCallback);
loadCallback.call(scope, records, arg, true);
}
var eh = function(message, exception) {
alert(message);
t.fireEvent("loadexception", t, message, loadCallback, exception);
loadCallback.call(scope, null, arg, false);
};
dwrFnArgs[l] = {// dwr配置参数
callback : cb,
exceptionHandler : eh
};
t.dwrFn.apply(Object, dwrFnArgs);
} else {
loadCallback.call(scope || t, null, arg, false);
}
}
});
分享到:
相关推荐
看到大家在讨论dwrproxy,这是本人修改后的.
ExtJs中使用dwrproxy,和json来处理从数据库里查询出来的数据 其中dwrproxy还支持分页(分页功能没做),将war包下载下来后,直接放在tomcat里,然后启动tomcat就可以了 数据库方面,该项目里用的是mysql,数据文件在...
NULL 博文链接:https://clq9761.iteye.com/blog/1001863
DWRproxy <br>EXT 的代理
这个例子中有登录,有...表格中的数据是通过DWRProxy加载共分3中形式,用以下3中解析器来解析的: DWRJsonReader DWRArrayReader DWRXmlReader 数据完全由JAVA方法返回,由DWR动态调用,利用了Spring作为Bean的容器。
dwrProxy.js
Ext扩展dwrproxyExt扩展dwrproxyExt扩展dwrproxyExt扩展dwrproxyExt扩展dwrproxyExt扩展dwrproxyExt扩展dwrproxyExt扩展dwrproxyExt扩展dwrproxy
如何实现前台使用Ext技术,dwr作为通信通道后Ext的分页问题,主要采用DWRProxy实现。
ExtJs3 DWR扩展 DWRProxy、DWRTreeLoader、DWRGridProxy,经过EXT3.0版本测试! 通过DWR向Ext提供数据!非常棒的扩展!
ExtJs DWR扩展 DWRProxy、DWRTreeLoader、DWRGridProxy,经过EXT3.0版本测试! 通过DWR向Ext提供数据!非常棒的扩展!
如果使用extjs 和 dwr 进行开发,这两个js文件必不可少,所以压缩到一起,进行了保留!
EXT2未加入对DWR的支持,此文件是对其的扩展进而实现DWR的支持
用EXT和DWR结合起来做工程时,在数据传输时会有点麻烦,这里提供的3个JS文件分别实现了DWR的数据代理,分页查询处理,动态树加载。并且实现了Ext.data.DWRArrayReader Ext.data.DWRXmlReader Ext.data....
dwrproxy.js 博文链接:https://cicada-it.iteye.com/blog/102949
Ext中结合dwr要用到的几个.js文件,下载后解压导入web工程中,
EXT+DWR分页 ,前人基础修改,绝对能用 有问题的大家相互交流, 具体使用请参考我的文章EXT+DWR分页
NULL 博文链接:https://redboy5711.iteye.com/blog/259913
Ext.data 在命名空间中定义了一系列store、reader 和proxy。Grid 和ComboxBox 都是以Ext.data 为 媒介获取数据的,它包含异步加载、类型转换...DWRProxy 就实现了自身的proxy 和reader,让EXT 可以直接从DWR 获得数据。