`
jljlpch
  • 浏览: 323265 次
  • 性别: Icon_minigender_1
  • 来自: 南昌
社区版块
存档分类
最新评论

dwrProxy的实现与改进

阅读更多

 

/**
 * 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);
	}
}
});

 

分享到:
评论
1 楼 jljlpch 2008-12-27  
本想采用try catch来进行调整参数,那样太浪费了
不知道有没有很好方法去生成默认的初始化参数?

相关推荐

    Ext的DWRProxy应用事例

    理解这些核心概念并结合实际的"DWRProxy.js"代码,我们可以深入学习如何在ExtJS应用程序中有效利用DWRProxy来实现与服务器的高效通信,从而提升用户体验。同时,DWRProxy结合源码阅读,可以帮助开发者更好地理解和...

    dwrproxy.js

    《DWRProxy.js:在ExtJS中的应用与实践》 DWRProxy.js是Direct Web Remoting (DWR)框架中的一个重要组成部分,它在JavaScript和Java之间建立起桥梁,使得Web应用程序可以方便地进行异步通信。DWR允许前端JavaScript...

    ext中dwrproxy与json处理数据技术

    ExtJs中使用dwrproxy,和json来处理从数据库里查询出来的数据 其中dwrproxy还支持分页(分页功能没做),将war包下载下来后,直接放在tomcat里,然后启动tomcat就可以了 数据库方面,该项目里用的是mysql,数据文件在...

    DWRproxy

    DWRproxy,全称Direct Web Remoting Proxy,是EXT框架中的一个重要组成部分,主要用来实现浏览器与服务器之间的异步通信。EXT是一个强大的JavaScript库,用于构建富客户端应用,而DWRproxy则是EXT与服务器端交互的...

    DWRProxy的运用实例,Ext,Dwr,Spring的完美结合

    这个例子中有登录,有...表格中的数据是通过DWRProxy加载共分3中形式,用以下3中解析器来解析的: DWRJsonReader DWRArrayReader DWRXmlReader 数据完全由JAVA方法返回,由DWR动态调用,利用了Spring作为Bean的容器。

    dwrproxy dwrtreeloader

    总结,"dwrproxy.js"和"DWRTreeLoader.js"的组合使用,使得开发者可以利用DWR的便捷性与ExtJS的强大UI功能,轻松地实现服务器端动态加载和展现树形数据,大大提高了Web应用的交互性和用户体验。在这样的项目中,这两...

    dwrProxy.js

    dwrProxy.js

    EXTJS 3 整合DWR (DWRProxy、DWRTreeLoader、DWRGridProxy )

    EXTJS 3 整合DWR (DWRProxy、DWRTreeLoader、DWRGridProxy) 是一个在EXTJS 3.0版本中实现的重要技术整合,它将DWR(Direct Web Remoting)的强大功能引入到EXTJS的前端框架中,以实现更高效的数据交互。EXTJS是一个...

    dwrproxy.js,DWRTreeLoader.js,PagingDWRProxy.js

    总的来说,`dwrproxy.js`、`DWRTreeLoader.js`和`PagingDWRProxy.js`是Ext框架与DWR集成的关键组件,它们提供了丰富的功能,帮助开发者实现与服务器的高效数据交互,创建动态、响应式的Web界面。在项目中正确地使用...

    ExtJs DWR扩展 DWRProxy、DWRTreeLoader、DWRGridProxy

    例如,开发者可以通过DWRProxy设置一个DWR服务,然后在客户端的GridPanel或TreePanel中配置相应的DWRGridProxy或DWRTreeLoader,这样就可以轻松地实现数据的动态加载和更新。这种集成方式尤其适用于需要大量实时数据...

    Ext扩展dwrproxy

    Ext扩展dwrproxyExt扩展dwrproxyExt扩展dwrproxyExt扩展dwrproxyExt扩展dwrproxyExt扩展dwrproxyExt扩展dwrproxyExt扩展dwrproxyExt扩展dwrproxy

    Ext2.2.GridPanel分页处理+dwrproxy(js对象和json两种数据)

    总结一下,本话题介绍了如何在Ext2.2的GridPanel中实现分页处理,利用DWRProxy与后台进行数据交互。无论数据是以JS对象还是JSON格式传输,关键在于理解数据流的过程,并正确配置相关的Store、Reader和DWR方法。通过...

    DwrProxy.js

    EXT2未加入对DWR的支持,此文件是对其的扩展进而实现DWR的支持

    DWRProxy.js,DWRTreeLoader.js,PagingDWRProxy.js

    用EXT和DWR结合起来做工程时,在数据传输时会有点麻烦,这里提供的3个JS文件分别实现了DWR的数据代理,分页查询处理,动态树加载。并且实现了Ext.data.DWRArrayReader Ext.data.DWRXmlReader Ext.data....

    ext js配合dwr在java中的用法

    dwrproxy.js 博文链接:https://cicada-it.iteye.com/blog/102949

    可用的dwrproxy.js,参考我的文章EXT+DWR分页

    EXT+DWR分页 ,前人基础修改,绝对能用 有问题的大家相互交流, 具体使用请参考我的文章EXT+DWR分页

    extjs兼容dwr的代理和DWRTreeLoader

    DWRProxy是ExtJS中用于与DWR接口交互的类。它提供了设置DWR配置、执行远程方法和处理回调的方法。在ExtJS应用中,你可以创建一个DWRProxy实例,指定需要调用的DWR服务端接口,并在客户端进行调用。例如: ```...

    经验总结-Extjs(一)数据交互设计

    综上所述,关于“经验总结-Extjs(一)数据交互设计”的主题,我们可以深入探讨ExtJS如何通过Store、Model、Proxy(尤其是DWRProxy)与服务器进行高效的数据交互,以及在实际项目中如何进行数据管理、事件处理和性能...

Global site tag (gtag.js) - Google Analytics