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