也已经写了很久时间的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) { var datajson = ext.decode(response.responsetext); if(datajson.state != 200 || datajson.data == null || datajson.data.length == 0) { //服务器返回错误 return ; } var data = datajson.data; //插入“全部”选项 if(combo.emptyindex >= 0) { var emp = {}; emp[combo.displayfield] = "全部"; emp[combo.valuefield] = "全部"; ext.array.insert(data,combo.emptyindex,[emp]); } var store = 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',就可以搞定了,代码看起来简洁又漂亮。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持代码网。
发表评论