ExtJs5.1多选下拉框CheckComb
来源:互联网 发布:精灵恢复软件 注册码 编辑:程序博客网 时间:2024/06/05 18:30
ExtJs这么多个版本了,可就是不提供多选下拉框,老外不用这个玩意吗?
5都出来这么久了,新写的项目就用5吧,把以前Extjs4.2的时搜到前人的CheckComb改巴改巴,能用了就赶紧贴上来,没有仔细测试各种情况。
Ext.define('Ext.ux.CheckCombo', {extend : 'Ext.form.field.ComboBox',alias : 'widget.checkcombo',multiSelect : true,allSelector : false,noData : true,noDataText : 'No combo data',addAllSelector : false,allSelectorHidden : false,enableKeyEvents : true,afterExpandCheck : false,allText : 'All',oldValue : '',listeners : {/* * uncomment if you want to reload store on every combo expand * beforequery: function(qe) { this.store.removeAll(); delete * qe.combo.lastQuery; }, */focus : function(cpt) {cpt.oldValue = cpt.getValue();}},createPicker : function() {var me = this, picker, menuCls = Ext.baseCSSPrefix + 'menu', opts = Ext.apply({pickerField : me,selectionModel : me.pickerSelectionModel,floating : true,hidden : true,ownerCt : me.ownerCt,cls : me.el.up('.' + menuCls) ? menuCls : '',store : me.getPickerStore(),displayField : me.displayField,preserveScrollOnRefresh : true,pageSize : me.pageSize,tpl : ['<tpl for=".">','<div class="x-boundlist-item" role="option"><span class="x-combo-checker"> </span> {'+ me.displayField + '}</div>', '</tpl>']}, me.listConfig, me.defaultListConfig);picker = me.picker = Ext.create('Ext.view.BoundList', opts);if (me.pageSize) {picker.pagingToolbar.on('beforechange', me.onPageChange, me);}// We limit the height of the picker to fit in the space above// or below this field unless the picker has its own ideas about that.if (!picker.initialConfig.maxHeight) {picker.on({beforeshow : me.onBeforePickerShow,scope : me});}picker.getSelectionModel().on({beforeselect : me.onBeforeSelect,beforedeselect : me.onBeforeDeselect,scope : me});picker.getNavigationModel().navigateOnSpace = false;me.store.on('load', function(store) {if (store.getTotalCount() == 0) {me.allSelectorHidden = true;if (me.allSelector != false)me.allSelector.setStyle('display', 'none');if (me.noData != false)me.noData.setStyle('display', 'block');} else {me.allSelectorHidden = false;if (me.allSelector != false)me.allSelector.setStyle('display', 'block');if (me.noData != false)me.noData.setStyle('display', 'none');}});return picker;},reset : function() {var me = this;me.setValue('');},setValue : function(value) {this.value = value;if (!value) {if (this.allSelector != false)this.allSelector.removeCls('x-boundlist-selected');return this.callParent(arguments);}if (typeof value == 'string') {var me = this, records = [], vals = value.split(',');if (value == '') {if (me.allSelector != false)me.allSelector.removeCls('x-boundlist-selected');} else {if (vals.length == me.store.getCount() && vals.length != 0) {if (me.allSelector != false)me.allSelector.addCls('x-boundlist-selected');elseme.afterExpandCheck = true;}}Ext.each(vals, function(val) {var record = me.store.getById(parseInt(val));if (record)records.push(record);});return me.setValue(records);} elsereturn this.callParent(arguments);},getValue : function() {if (typeof this.value == 'object')return this.value.join(',');elsereturn this.value;},getSubmitValue : function() {return this.getValue();},expand : function() {var me = this, bodyEl, picker, doc, collapseIf;if (me.rendered && !me.isExpanded && !me.isDestroyed) {bodyEl = me.bodyEl;picker = me.getPicker();doc = Ext.getDoc();collapseIf = me.collapseIf;picker.setMaxHeight(picker.initialConfig.maxHeight);if (me.matchFieldWidth) {picker.width = me.bodyEl.getWidth();}// Show the picker and set isExpanded flag. alignPicker only works// if isExpanded.picker.show();me.isExpanded = true;me.alignPicker();bodyEl.addCls(me.openCls);if (me.noData == false)me.noData = picker.getEl().down('.x-boundlist-list-ct').insertHtml('beforeBegin','<div class="x-boundlist-item" role="option">'+ me.noDataText + '</div>', true);if (me.addAllSelector == true && me.allSelector == false) {me.allSelector = picker.getEl().down('.x-boundlist-list-ct').insertHtml('beforeBegin','<div class="x-boundlist-item" role="option"><span class="x-combo-checker"> </span> '+ me.allText + '</div>', true);me.allSelector.on('click', function(e) {if (me.allSelector.hasCls('x-boundlist-selected')) {me.allSelector.removeCls('x-boundlist-selected');me.setValue('');me.fireEvent('select', me, []);} else {var records = [];me.store.each(function(record) {records.push(record);});me.allSelector.addCls('x-boundlist-selected');me.select(records);me.fireEvent('select', me, records);}});if (me.allSelectorHidden == true)me.allSelector.hide();elseme.allSelector.show();if (me.afterExpandCheck == true) {me.allSelector.addCls('x-boundlist-selected');me.afterExpandCheck = false;}}// Collapse on touch outside this component tree.// Because touch platforms do not focus document.body on touch// so no focusleave would occur to trigger a collapse.me.touchListeners = doc.on({// Do not translate on non-touch platforms.// mousedown will blur the field.translate : false,touchstart : me.collapseIf,scope : me,delegated : false,destroyable : true});// Scrolling of anything which causes this field to move should// collapseme.scrollListeners = Ext.on({scroll : me.onGlobalScroll,scope : me,destroyable : true});// monitor touch and mousewheelme.hideListeners = doc.on({mousewheel : me.collapseIf,touchstart : me.collapseIf,scope : me,delegated : false,destroyable : true});// Buffer is used to allow any layouts to complete before we alignExt.on('resize', me.alignPicker, me, {buffer : 1});me.fireEvent('expand', me);me.onExpand();} else {me.fireEvent('expand', me);me.onExpand();}},onListSelectionChange : function(list, selectedRecords) {var me = this, isMulti = me.multiSelect, hasRecords = selectedRecords.length > 0;// Only react to selection if it is not called from setValue, and if our// list is// expanded (ignores changes to the selection model triggered elsewhere)if (!me.ignoreSelection && me.isExpanded) {if (!isMulti) {Ext.defer(me.collapse, 1, me);}/* * Only set the value here if we're in multi selection mode or we * have a selection. Otherwise setValue will be called with an empty * value which will cause the change event to fire twice. */if (isMulti || hasRecords) {me.setValue(selectedRecords, false);}if (hasRecords) {me.fireEvent('select', me, selectedRecords);}me.inputEl.focus();if (me.addAllSelector == true && me.allSelector != false) {if (selectedRecords.length == me.store.getTotalCount())me.allSelector.addCls('x-boundlist-selected');elseme.allSelector.removeCls('x-boundlist-selected');}}}});
还有相关的css啊,图片就自己找吧,我是把4里面的图片copy过来的:
/*ext多选下拉框样式,未选*/.x-combo-checker {background-position: 50% -2px;margin-left: 1px;background-color: transparent;background-image:url(../thirdjs/extjs513/ext-theme-classic/images/unchecked.gif);background-position: -1px -1px;background-repeat: no-repeat;height: 14px;width: 14px;display: inline-block;}/*ext多选下拉框样式,已选*/.x-boundlist-selected .x-combo-checker {background-image:url(../thirdjs/extjs513/ext-theme-classic/images/checked.gif);}
1 1
- ExtJs5.1多选下拉框CheckComb
- Extjs5实现带复选框的多选下拉选,复选框用extjs提供的checkbox样式
- Extjs5实现带复选框的多选下拉选,复选框用html本身的checkbox控件
- extjs5备忘(1)
- ExtJS5 - 实现多表头Grid
- Extjs5.1(9):Grid组件
- 学习Extjs5.1 操作备忘
- Extjs5.1 柱状图动态加载
- 多选下拉框
- 多选下拉框
- 多选下拉框
- 多选下拉框 源码【1】
- Extjs5.1学习笔记1——提示框等基本组件的使用
- extjs5 tree checkbox 级联勾选解决方案
- ExtJS5.0.0,5.0.1官方下载地址
- Extjs5.1(10):Form加载复杂Json
- EXTJS5+MVC(1)运行环境以及结构
- extJS5.1-----利用sencha cmd建立工程项目
- POJ 2251:Dungeon Master【bfs】
- Android getVisibility()返回值对应的状态
- JSP基础语法篇——编程题
- LightOJ 1051 Good or Bad
- caffe study(4) - 优化算法基本原理
- ExtJs5.1多选下拉框CheckComb
- 机械硬盘HDD
- 基于V4L2驱动程序的USB摄像头Android(JNI)的编写(一)
- 《父与子的编程之旅》——可计数与不可计数的循环
- MySQL文件结构
- CUDA安装
- Android Http请求框架一:Get 和 Post 请求
- bzoj1188: [HNOI2007]分裂游戏
- html5 canvas画图