combobox使用dwr请求远程数据之传递参数

AngelicaA 2012-09-29

combobox关于dwr请求传递参数目前好像没有直接提供属性设置,像datagrid的param属性.

通过查看源码发现.其实在构建cmobobox的时候,是提供了param参数设置的

$.fn.combobox = function(options, param){...}
于是在使用的时候声明如下
$('#cc').combobox({  
	    url:UserAction.getUsers,  
	    valueField:'id',  
	    textField:'text'
},{id:1});
但是结果发现属性id并没有传递到后台.

再跟进代码发现,在构建combobox的时候调用了一个request方法来请求远程数据.

request(this);
问题好像已经发现了,我们构建时候设置的参数并没有传递到request中,也就在并没有使用我们设置的参数.为什么这么做甚是不解.

问题找到就好修改了,有两种修改方式

1.直接修改源码,将构造函数中request(this)修改成request(this,null,param);

2.重写dwrloader

第一种方式并不推荐,这里修改了以后就要增加对这里的维护成本

第二种推荐使用。

直接上代码

--构建combobox

$('#cc').combobox({  
	    url:UserAction.getUsers,  
	    valueField:'id',  
	    textField:'text',
	    loader:myLoader({id:"101"}),
	    onLoadSuccess:function(){
			$('#cc').combobox('select',-1);
	    }
});

--重写dwrloader

function myLoader(parameter){
	return function(param, success, error){
		var opts = $(this)['combobox']('options');
		if (!opts.url) return false;
		var dwrFunc = eval(opts.url);
		dwrFunc(parameter, {
			callback: function(data){
				data.unshift({text:'全部',id:-1});
				success(data);
			},
			exceptionHandler: function(){
				error.apply(this, arguments);
			}
		});
	};
}

相关推荐