Extjs让combobox写起来简洁又漂亮
也已经写了很久时间的extjs,每次都用到很多的combobox,配置很多东西觉得实在是太麻烦,所以根据常用到的情况写了一个简便的combobox,再次记录下来,以免放在某个地方忘记了找不到了。
定义一个基本的baseCombobox类,如下。
Ext.define('Admin.view.baseCmp.BaseCombobox',{ extend:'Ext.form.field.ComboBox', xtype:'baseCombobox', editable:false, labelSeparator:':', labelWdith:0, triggerAction:'all', labelAlign:'right', //forceSelection:true,此属性操作时,就算去掉文字后,失去焦点后还是会选择上一次选择的记录 autoSelect:true, selectOnfocus:true, valueNotFoundText:'', name:'', queryMode:'local', url:'', displayField:'', valueField:'', requires:['Admin.view.baseCmp.BaseComboboxController'], controller:'baseComboboxController', emptyIndex:-1,//自定义属性,空值所在下标,-1则不添加 selectIndex:0,//自定义属性,自动选择下标 params:null,//自定义属性,数据参数 listeners:{ render:'getComboData', scope:'controller' }, });
Ext.define('Admin.view.baseCmp.BaseComboboxController',{ extend:'Ext.app.ViewController', alias:'controller.baseComboboxController', getComboData:function(combo){ Ext.Ajax.request({ url:combo.url, method:'POST', params:combo.params, success:function(response){ vardataJson=Ext.decode(response.responseText); if(dataJson.state!=200||dataJson.data==null||dataJson.data.length==0) { //服务器返回错误 return; } vardata=dataJson.data; //插入“全部”选项 if(combo.emptyIndex>=0) { varemp={}; emp[combo.displayField]="全部"; emp[combo.valueField]="全部"; Ext.Array.insert(data,combo.emptyIndex,[emp]); } varstore=Ext.create('Ext.data.Store',{ fields:Ext.Object.getKeys(data[0]), data:data }); combo.setStore(store); //如果指定选中某个值 if(combo.selectValue!=null) { combo.select(combo.selectValue); } else { //如果指定选中某个下标的值,-1为最后一个,>0则为第selectIndex个 if(combo.selectIndex==-1) { console.log(data.length-1); combo.select(data[data.length-1][combo.valueField]); } else { combo.select(data[combo.selectIndex][combo.valueField]); } } //触发选中事件 //combo.fireEvent('select',combo,store.getAt(combo.selectIndex)); }, failure:function(response){ //请求服务器失败 } }); } });
调用实例:
{ xtype:'baseCombobox', name:"typeName", fieldLabel:"类型", displayField:'typeName', valueField:'id', emptyIndex:0, multiSelect:false, url:"/itemType/list", listeners:{ select:'query' } },
这样大大方便了我使用combobox,如果某种类型的combobox需要重复使用,建议还是直接定义好他,到需要用的时候一句:
xtype:'itemTypeCombobox',就可以搞定了,代码看起来简洁又漂亮。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。