浏览 2233 次
锁定老帖子 主题:dwrProxy的实现与改进
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-12-27
最后修改:2008-12-28
/** * 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); } } });
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2008-12-27
最后修改:2008-12-27
本想采用try catch来进行调整参数,那样太浪费了
不知道有没有很好方法去生成默认的初始化参数? |
|
返回顶楼 | |