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 数值项目的格式化函数代码
May 14 Javascript
24款热门实用的jQuery插件推荐
Dec 24 Javascript
jQuery实现的网页左侧在线客服效果代码
Oct 23 Javascript
javascript简单进制转换实现方法
Nov 24 Javascript
微信小程序 实例开发总结
Apr 26 Javascript
Canvas放置反弹效果随机图形(实例)
Aug 17 Javascript
通过js动态创建标签,并设置属性方法
Feb 24 Javascript
layui加载数据显示loading加载完成loading消失的实例代码
Sep 23 Javascript
简单了解JavaScript sort方法
Nov 25 Javascript
原生JS实现贪吃蛇小游戏
Mar 09 Javascript
vue Element左侧无限级菜单实现
Jun 10 Javascript
js实现弹幕飞机效果
Aug 27 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编码规范之注释和文件结构说明
2010/07/09 PHP
PHP自定义函数收代码
2010/08/01 PHP
一道求$b相对于$a的相对路径的php代码
2010/08/08 PHP
php计算数组相同值出现次数的代码(array_count_values)
2015/01/20 PHP
Laravel实现ORM带条件搜索分页
2019/10/24 PHP
PHPExcel实现的读取多工作表操作示例
2020/04/14 PHP
extjs fckeditor集成代码
2009/05/10 Javascript
JavaScript 闭包深入理解(closure)
2009/05/27 Javascript
如何用JavaScript动态呼叫函数(两种方式)
2013/05/03 Javascript
标题过长使用javascript按字节截取字符串
2014/04/24 Javascript
做web开发 先学JavaScript
2014/12/12 Javascript
jQuery实现网页抖动的菜单抖动效果
2015/08/07 Javascript
JavaScript字符串删除重复字符的方法
2015/12/25 Javascript
使用jQuery.form.js/springmvc框架实现文件上传功能
2016/05/12 Javascript
Vue 组件间的样式冲突污染
2017/08/31 Javascript
JavaScript实现计数器基础方法
2017/10/10 Javascript
vue引入js数字小键盘的实现代码
2018/05/14 Javascript
Vue插值、表达式、分隔符、指令知识小结
2018/10/12 Javascript
微信小程序实现人脸识别登陆的示例代码
2019/04/02 Javascript
js实现简单放大镜效果
2020/03/07 Javascript
vue切换菜单取消未完成接口请求的案例
2020/11/13 Javascript
Python实现检测文件的MD5值来查找重复文件案例
2020/03/12 Python
学点简单的Django之第一个Django程序的实现
2021/02/24 Python
CSS3系列之3D制作方法案例
2017/08/14 HTML / CSS
美国市场上最实惠的送餐服务:Dinnerly
2018/03/18 全球购物
Surfdome西班牙:世界上最受欢迎的生活方式品牌
2019/02/13 全球购物
乌克兰排名第一的在线旅游超市:Farvater.Travel
2020/01/02 全球购物
如何拷贝一整个Java对象,包括它的状态
2013/12/27 面试题
《长相思》听课反思
2014/04/10 职场文书
平安校园建设方案
2014/05/02 职场文书
丧事答谢词
2015/01/05 职场文书
2015年秋季开学典礼校长致辞
2015/07/16 职场文书
情侣餐厅的创业计划书范本!
2019/07/26 职场文书
CSS 还能这样玩?奇思妙想渐变的艺术
2021/04/27 HTML / CSS
Vue3.0中Ref与Reactive的区别示例详析
2021/07/07 Vue.js
JS中forEach()、map()、every()、some()和filter()的用法
2022/05/11 Javascript