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 相关文章推荐
原生js实现跨浏览器获取鼠标按键的值
Apr 08 Javascript
JS预览图像将本地图片显示到浏览器上
Aug 25 Javascript
jQuery的DOM操作之删除节点示例
Jan 03 Javascript
用javascript替换URL中的参数值示例代码
Jan 27 Javascript
详谈js遍历集合(Array,Map,Set)
Apr 06 Javascript
vue-cli webpack 开发环境跨域详解
May 18 Javascript
bootstrap-table组合表头的实现方法
Sep 07 Javascript
Vue 获取数组键名的方法
Jun 21 Javascript
Vue一个案例引发的递归组件的使用详解
Nov 15 Javascript
修改layui的后台模板的左侧导航栏可以伸缩的方法
Sep 10 Javascript
layui实现鼠标移动到单元格上显示数据的方法
Sep 11 Javascript
详解vue3.0 diff算法的使用(超详细)
Jul 01 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
Body是什么,该怎么喝出咖啡里的口感
2021/03/03 咖啡文化
Zend Studio去除编辑器的语法警告设置方法
2012/10/24 PHP
解析php中session的实现原理以及大网站应用应注意的问题
2013/06/17 PHP
php 使用file_get_contents读取大文件的方法
2014/11/13 PHP
php对象在内存中的存在形式分析
2015/02/03 PHP
php处理复杂xml数据示例
2016/07/11 PHP
PHP魔术方法之__call与__callStatic使用方法
2017/07/23 PHP
PHP的PDO预处理语句与存储过程
2019/01/27 PHP
php实现简单的守护进程创建、开启与关闭操作
2019/08/13 PHP
phpcmsv9.0任意文件上传漏洞解析
2020/10/20 PHP
DOM 脚本编程中的兄弟节点
2009/10/31 Javascript
Jquery插件 easyUI属性汇总
2011/01/19 Javascript
TextArea不支持maxlength的解决办法(jquery)
2011/09/13 Javascript
hover的用法及live的用法介绍(鼠标悬停效果)
2013/03/29 Javascript
详解nodejs的express如何自动生成项目框架
2017/07/12 NodeJs
vue修改vue项目运行端口号的方法
2017/08/04 Javascript
JS实现图片放大镜插件详解
2017/11/06 Javascript
node+koa2+mysql+bootstrap搭建一个前端论坛
2018/05/06 Javascript
一些你可能不熟悉的JS知识点总结
2019/03/15 Javascript
Elementui表格组件+sortablejs实现行拖拽排序的示例代码
2019/08/28 Javascript
JS+HTML实现自定义上传图片按钮并显示图片功能的方法分析
2020/02/12 Javascript
[48:44]2014 DOTA2国际邀请赛中国区预选赛5.21 TongFu VS HGT
2014/05/22 DOTA
python str与repr的区别
2013/03/23 Python
详解Python Matplotlib解决绘图X轴值不按数组排序问题
2019/08/05 Python
python3注册全局热键的实现
2020/03/22 Python
Django中的模型类设计及展示示例详解
2020/05/29 Python
python获取整个网页源码的方法
2020/08/03 Python
Pycharm安装第三方库失败解决方案
2020/11/17 Python
Python 实现一个简单的web服务器
2021/01/03 Python
HTML5中外部浏览器唤起微信分享功能的代码
2020/09/15 HTML / CSS
美国零售商店:Blue&Cream
2017/04/07 全球购物
回馈慈善的设计师太阳镜:DIFF eyewear
2019/10/17 全球购物
出生公证书样本
2014/04/04 职场文书
迎新生晚会主持词
2015/06/30 职场文书
python3.7.2 tkinter entry框限定输入数字的操作
2021/05/22 Python
Android Flutter实现3D动画效果示例详解
2022/04/07 Java/Android