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