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 相关文章推荐
屏蔽Flash右键信息的js代码
Jan 17 Javascript
jQuery timers计时器简单应用说明
Oct 28 Javascript
jQuery实现可用于博客的动态滑动菜单完整实例
Sep 17 Javascript
向JavaScript的数组中添加元素的方法小结
Oct 24 Javascript
Bootstrap 源代码分析(未完待续)
Aug 17 Javascript
javascript中对象的定义、使用以及对象和原型链操作小结
Dec 14 Javascript
利用js的闭包原理做对象封装及调用方法
Apr 07 Javascript
Bootstrap fileinput文件上传预览插件使用详解
May 16 Javascript
vue-cli2.9.3 详细教程
Apr 23 Javascript
详解Vue SSR( Vue2 + Koa2 + Webpack4)配置指南
Nov 13 Javascript
探索JavaScript中私有成员的相关知识
Jun 13 Javascript
vue打包静态资源后显示空白及static文件路径报错的解决
Sep 02 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
asp和php下textarea提交大量数据发生丢失的解决方法
2008/01/20 PHP
解析link_mysql的php版
2013/06/30 PHP
PHP+AJAX实现投票功能的方法
2015/09/28 PHP
PHP扩展Memcache分布式部署方案
2015/12/06 PHP
JavaScript高级程序设计 XML、Ajax 学习笔记
2011/09/10 Javascript
细说javascript函数从函数的构成开始
2013/08/29 Javascript
jquery获取html元素的绝对位置和相对位置的方法
2014/06/20 Javascript
JavaScript导出Excel实例详解
2014/11/25 Javascript
JavaScript中的值类型转换介绍
2014/12/31 Javascript
Vue.js实现一个自定义分页组件vue-paginaiton
2016/09/05 Javascript
AngularJS中table表格基本操作示例
2017/10/10 Javascript
vue单页面打包文件大?首次加载慢?nginx带你飞,从7.5M到1.3M蜕变过程(推荐)
2018/01/16 Javascript
nodejs acl的用户权限管理详解
2018/03/14 NodeJs
vue组件通信传值操作示例
2019/01/08 Javascript
微信小程序 checkbox使用实例解析
2019/09/09 Javascript
vue使用keep-alive实现组件切换时保存原组件数据方法
2020/10/30 Javascript
python实现Adapter模式实例代码
2018/02/09 Python
Python系统监控模块psutil功能与经典用法分析
2018/05/24 Python
解决Matplotlib图表不能在Pycharm中显示的问题
2018/05/24 Python
Python sorted函数详解(高级篇)
2018/09/18 Python
python 实现调用子文件下的模块方法
2018/12/07 Python
Python制作exe文件简单流程
2019/01/24 Python
python可视化text()函数使用详解
2020/02/11 Python
python如何输出反斜杠
2020/06/18 Python
Python如何读写字节数据
2020/08/05 Python
Python环境搭建过程从安装到Hello World
2021/02/05 Python
法国时尚品牌乐都特瑞士站:La Redoute瑞士
2016/09/05 全球购物
高中军训感言600字
2014/03/11 职场文书
高三上学期学习自我评价
2014/04/23 职场文书
教师业务学习材料
2014/12/16 职场文书
叶问观后感
2015/06/15 职场文书
同意转租证明
2015/06/24 职场文书
大学生读书笔记大全
2015/07/01 职场文书
经典爱情感言
2015/08/03 职场文书
机械原理课程设计心得体会
2016/01/15 职场文书
2016年国庆节假期旅游工作总结
2016/04/01 职场文书