有些时候,当我们用easyui combobox控件加载页面数据的时候,由于数据量过多(几千几万),而且如果操作频繁的话,进而会引起需要加载半天才能去打开下拉面板,还有可能卡死。其实这种问题主要时间浪费在了渲染下拉面板上面,作者在遇到这种问题的时候也没找到什么解决的,只有改变控件的加载方式,我使用的是筛选加载,即通过输入的文字去加载下拉面板的数据,这样就缓冲了部分时间:
//初始新增下拉框
$CommonUI.getComboBox('#addorganType').combobox({
url:$WEB_ROOT_PATH+'/basecode/baseCodeCtrl.htm?BLHMI=findBaseCode&dto.baseCode.codeSystem=organType',
valueField:'id',
textField:'text',
onSelect:function(record){
$.ajax({
url:$WEB_ROOT_PATH+'/basecode/baseCodeCtrl.htm?BLHMI=findBaseCodeByParameters',
type: 'post',
dataType: 'json',
data:{"dto.baseCode.codeSystem":"organDic","dto.baseCode.comments":record.text},
success: function(datas){
var text='';
//加载combobox,暂时只支持筛选加载下拉数据-注:数量太多时,时间耗在了渲染界面上
$CommonUI.getComboBox('#addorganName').combobox({
valueField:'id',
textField:'text',
data:[],
onChange:function(newValue, oldValue){
var loadData = new Array();
text=newValue;
for(var i in datas){
if(text!=''&&(datas[i].id.indexOf(text)>-1||datas[i].text.indexOf(text)>-1)){
loadData.push(datas[i]);
}
}
$CommonUI.getComboBox('#addorganName').combobox('loadData',loadData);
},
onLoadSuccess:function(){
if(text!=''){
$CommonUI.getComboBox('#addorganName').combobox('showPanel');
}else{
$CommonUI.getComboBox('#addorganName').combobox('hidePanel');
}
}
});
}
});
}
});
我用的是webui控件,跟easyui原理一致,替换前缀就可用,如果以后找到更好的方法解决,再来跟新!