Extjs让combobox写起来简洁又漂亮


Posted in Javascript onJanuary 05, 2017

也已经写了很久时间的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',就可以搞定了,代码看起来简洁又漂亮。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
将HTML自动转为JS代码
Jun 26 Javascript
javascript中expression的用法整理
May 13 Javascript
js使用DOM操作实现简单留言板的方法
Apr 10 Javascript
浅谈$(document)和$(window)的区别
Jul 15 Javascript
jQuery轮播图效果精简版完整示例
Sep 04 Javascript
jquery select2的使用心得(推荐)
Dec 04 Javascript
关于jQuery.ajax()的jsonp碰上post详解
Jul 02 jQuery
Vue2.0父组件与子组件之间的事件发射与接收实例代码
Sep 19 Javascript
浅谈vue方法内的方法使用this的问题
Sep 15 Javascript
js取小数点后两位四种方法
Jan 18 Javascript
vue移动端城市三级联动组件使用详解
Jul 26 Javascript
详解ES6 中的Object.assign()的用法实例代码
Jan 11 Javascript
JS实现给对象动态添加属性的方法
Jan 05 #Javascript
bootstrap datetimepicker实现秒钟选择下拉框
Jan 05 #Javascript
JavaScript实现数组降维详解
Jan 05 #Javascript
jQuery解析返回的xml和json方法详解
Jan 05 #Javascript
使用snowfall.jquery.js实现爱心满屏飞的效果
Jan 05 #Javascript
jQuery实现动态文字搜索功能
Jan 05 #Javascript
JS实现HTML标签转义及反转义
Apr 14 #Javascript
You might like
PHP获取数组中某元素的位置及array_keys函数应用
2013/01/29 PHP
PHP正则获取页面所有图片地址
2016/03/23 PHP
Joomla实现组件中弹出一个模式(modal)窗口的方法
2016/05/04 PHP
利用PHP获取网站访客的所在地位置
2017/01/18 PHP
prototype 1.5相关知识及他人笔记
2006/12/16 Javascript
JavaScript字符串对象slice方法入门实例(用于字符串截取)
2014/10/16 Javascript
JS+CSS实现精美的二级导航效果代码
2015/09/17 Javascript
理解AngularJs篇:30分钟快速掌握AngularJs
2016/12/23 Javascript
JS简单实现点击按钮或文字显示遮罩层的方法
2017/04/27 Javascript
详解Vue用自定义指令完成一个下拉菜单(select组件)
2017/10/31 Javascript
vue之浏览器存储方法封装实例
2018/03/15 Javascript
springMvc 前端用json的方式向后台传递对象数组方法
2018/08/07 Javascript
小程序分页实践之编写可复用分页组件
2019/07/18 Javascript
Node使用Nodemailer发送邮件的方法实现
2020/02/24 Javascript
vue组件暴露和.js文件暴露接口操作
2020/08/11 Javascript
微信小程序选择图片控件
2021/01/19 Javascript
[02:17]2016国际邀请赛中国区预选赛VG战队领队采访
2016/06/26 DOTA
python对字典进行排序实例
2014/09/25 Python
以一个投票程序的实例来讲解Python的Django框架使用
2016/02/18 Python
Python中的FTP通信模块ftplib的用法整理
2016/07/08 Python
python3+opencv3识别图片中的物体并截取的方法
2018/12/05 Python
Python快速转换numpy数组中Nan和Inf的方法实例说明
2019/02/21 Python
详解python-图像处理(映射变换)
2019/03/22 Python
NumPy排序的实现
2020/01/21 Python
tensorflow实现从.ckpt文件中读取任意变量
2020/05/26 Python
浅谈keras通过model.fit_generator训练模型(节省内存)
2020/06/17 Python
Python Pandas数据分析工具用法实例
2020/11/05 Python
delegate与普通函数的区别
2014/01/22 面试题
应届生幼儿园求职信
2013/11/12 职场文书
医院总经理职责
2013/12/26 职场文书
学习党的群众路线教育实践活动心得体会
2014/03/01 职场文书
党的群众路线教育实践活动对照检查材料范文
2014/09/24 职场文书
青岛海底世界导游词
2015/02/11 职场文书
开除员工通知
2015/04/22 职场文书
2016教师读书思廉心得体会
2016/01/23 职场文书
Redis中缓存穿透/击穿/雪崩问题和解决方法
2021/12/04 Redis