combox的四种扩展
来源:互联网 发布:混乱武林独孤求败软件 编辑:程序博客网 时间:2024/05/17 06:31
摘要:ComboBox是常用控件之一,但由于其数据来源分两种形式:本地和远程,故写的形式难度并不亚于ExtJS中的TreePanel和GridPanel。鄙人也经常提醒自己的师弟师妹,ExtJS本身是面向对象写的,不能在应用的时候却不按照面向对象来写,面向对象最起码的好处就是代码的复用,对于网页来讲,代码复用的好处就是加载的JS会少很多,这样网页渲染时就不会很慢。下面我将分别介绍扩展的四种ComboBox。
类图:
扩展一:封装的月份ComboBox组件
效果:
代码:
// 封装的月份ComboBox组件MonthComboBox = Ext.extend(Ext.form.ComboBox, { fieldLabel : '月 份',// 标题名称 storeData : null,// ComboxBox数据源(数组形式) initComponent : function() { this.storeData = [[1, '1月'], [2, '2月'], [3, '3月'], [4, '4月'], [5, '5月'], [6, '6月'], [7, '7月'], [8, '8月'], [9, '9月'], [10, '10月'], [11, '11月'], [12, '12月']]; Ext.apply(this, { fieldLabel : this.fieldLabel, anchor : '100%', emptyText : '月份...', forceSelection : true,// 值为true时将限定选中的值为列表中的值,值为false则允许用户将任意文本设置到字段(默认为 // false)。 selectOnFocus : true,// 值为 ture // 时表示字段获取焦点时自动选择字段既有文本(默认为 // false)。 mode : 'local', store : new Ext.data.SimpleStore({ fields : ['value', 'text'], data : this.storeData }), editable : false, triggerAction : 'all', valueField : 'value', displayField : 'text' }); MonthComboBox.superclass.initComponent.call(this); } });
应用:
var cboMonth=new MonthComboBox({ renderTo : 'monthComboBox', width : 200 });
Html:
<div id="monthComboBox"></div><br/>
扩展二:封装的日期ComboBox组件
效果:
代码:
// 封装的日期ComboBox组件DayComboBox = Ext.extend(Ext.form.ComboBox, { fieldLabel : '日 期',// 标题名称 storeData : null,// ComboxBox数据源(数组形式) initComponent : function() { this.storeData = [[1, '1日'], [2, '2日'], [3, '3日'], [4, '4日'], [5, '5日'], [6, '6日'], [7, '7日'], [8, '8日'], [9, '9日'], [10, '10日'], [11, '11日'], [12, '12日'], [13, '13日'], [14, '14日'], [15, '15日'], [16, '16日'], [17, '17日'], [18, '18日'], [19, '19日'], [20, '20日'], [21, '21日'], [22, '22日'], [23, '23日'], [24, '24日'], [25, '25日'], [26, '26日'], [27, '27日'], [28, '28日'], [29, '29日'], [30, '30日'], [31, '31日']]; Ext.apply(this, { fieldLabel : this.fieldLabel, anchor : '100%', emptyText : '日期...', forceSelection : true, // 值为true时将限定选中的值为列表中的值, // 值为false则允许用户将任意文本设置到字段(默认为false)。 selectOnFocus : true, // 值为 ture时表示字段获取焦点时自动选择字段既有文本(默认为false)。 mode : 'local', store : new Ext.data.SimpleStore({ fields : ['value', 'text'], data : this.storeData }), editable : false, triggerAction : 'all', valueField : 'value', displayField : 'text' }); DayComboBox.superclass.initComponent.call(this); } });
应用:
var cboDay=new DayComboBox({ renderTo : 'dayComboBox', width : 200 });
Html:
<div id="dayComboBox"></div><br/>
扩展三:封装的DynamicCombox组件
效果:
代码:
按 Ctrl+C 复制代码
<textarea style="LINE-HEIGHT: 1.5; WIDTH: 1024px; FONT-FAMILY: Courier New; HEIGHT: 600px; FONT-SIZE: 12px">//封装的DynamicCombox组件DynamicCombox = Ext.extend(Ext.form.ComboBox, { fieldLabel : '动态ComboBox',// 标题名称 baseUrl : null, emptyText : null, valueField : null, displayField : null, initComponent : function() { Ext.apply(this, { fieldLabel : this.fieldLabel, anchor : '100%', emptyText : this.emptyText || '请选择', forceSelection : true, // 值为true时将限定选中的值为列表中的值, // 值为false则允许用户将任意文本设置到字段(默认为false)。 selectOnFocus : true, // 值为 ture时表示字段获取焦点时自动选择字段既有文本(默认为false)。 mode : 'remote', store : new Ext.data.JsonStore({ url : this.baseUrl, root : "root", remoteSort : true, fields : [this.valueField, this.displayField] }), editable : false,// 是否编辑 triggerAction : 'all', valueField : this.valueField, displayField : this.displayField, hiddenName : this.valueField }); DynamicCombox.superclass.initComponent.call(this); } });</textarea>按 Ctrl+C 复制代码
应用:
按 Ctrl+C 复制代码
按 Ctrl+C 复制代码
Json:
按 Ctrl+C 复制代码
按 Ctrl+C 复制代码
Html:
<div id="dynamicCombox"></div><br/>
扩展四:封装的ComboBoxTree组件
效果:
代码:
// 封装的ComboBoxTree组件ComboBoxTree = Ext.extend(Ext.form.ComboBox, { fieldLabel : 'ComboBoxTree',// 标题名称 baseUrl : null, emptyText : null, maxHeight : 300, treeId : Ext.id() + '-tree', tree : null, // all:所有结点都可选中 // exceptRoot:除根结点,其它结点都可选(默认) // folder:只有目录(非叶子和非根结点)可选 // leaf:只有叶子结点可选 selectNodeModel : 'exceptRoot', initComponent : function() { var resultTpl = new Ext.XTemplate('<tpl for="."><div style="height:' + this.maxHeight + 'px"><div id="' + this.treeId + '"></div></div></tpl>'); this.addEvents('afterchange'); Ext.apply(this, { fieldLabel : this.fieldLabel, anchor : '100%', emptyText : this.emptyText || '请选择', forceSelection : true, selectedClass : '', // 值为true时将限定选中的值为列表中的值, // 值为false则允许用户将任意文本设置到字段(默认为false)。 selectOnFocus : true, // 值为 ture时表示字段获取焦点时自动选择字段既有文本(默认为false)。 mode : 'local', store : new Ext.data.SimpleStore({ fields : [], data : [[]] }), editable : false,// 是否编辑 triggerAction : 'all', typeAhead : false, tpl : resultTpl, onSelect : Ext.emptyFn() }); ComboBoxTree.superclass.initComponent.call(this); }, expand : function() { ComboBoxTree.superclass.expand.call(this); if (this.tree.rendered) { return; } Ext.apply(this.tree, { height : this.maxHeight, border : false, autoScroll : true }); if (this.tree.xtype) { this.tree = Ext.ComponentMgr.create(this.tree, this.tree.xtype); } this.tree.render(this.treeId); var root = this.tree.getRootNode(); if (!root.isLoaded()) { root.reload(); } this.tree.on('click', function(node) { var selModel = this.selectNodeModel; var isLeaf = node.isLeaf(); if ((node == root) && selModel != 'all') { return; } else if (selModel == 'folder' && isLeaf) { return; } else if (selModel == 'leaf' && !isLeaf) { return; } var oldNode = this.getNode(); if (this.fireEvent('beforeselect', this, node, oldNode) !== false) { this.setValue(node); this.collapse(); this.fireEvent('select', this, node, oldNode); (oldNode !== node) ? this.fireEvent('afterchange', this, node, oldNode) : ''; } }, this); this.tree.expandAll(); }, setValue : function(node) { this.node = node; var text = node.text; this.lastSelectionText = text; if (this.hiddenField) { this.hiddenField.value = node.id; } Ext.form.ComboBox.superclass.setValue.call(this, text); this.value = node.id; }, getValue : function() { return typeof this.value != 'undefined' ? this.value : ''; }, getNode : function() { return this.node; }, clearValue : function() { ComboBoxTree.superclass.clearValue.call(this); this.node = null; }, // private destroy : function() { ComboBoxTree.superclass.destroy.call(this); Ext.destroy([this.node, this.tree]); delete this.node; }});
应用:
var cboTree = new ComboBoxTree({ renderTo : 'comboBoxTree', width : 200, tree : { xtype:'treepanel', loader: new Ext.tree.TreeLoader({dataUrl:'treedata.json'}), root : new Ext.tree.AsyncTreeNode({id:'0',text:'根结点'}) }, //all:所有结点都可选中 //exceptRoot:除根结点,其它结点都可选(默认) //folder:只有目录(非叶子和非根结点)可选 //leaf:只有叶子结点可选 selectNodeModel:'leaf' });
Json:
[{ id : 'root', text : '单位库', leaf : false, children : [{ id : '1002', text : '重庆市气象局', checked : true, leaf : false, children : [{ id : '1003', text : '机关部门', checked : true, leaf : true }, { id : '1004', text : '天气办公室', checked : true, leaf : true }] },{ id : '1005', text : '河北工业大学', checked : false, leaf : true }] }]
Html:
<div id="comboBoxTree"></div><br/>
- combox的四种扩展
- Combox 扩展
- mfc Combox扩展类
- Ext Combox模糊匹配扩展
- Combox的数据源
- 一个自定义的Combox
- 一个自定义的Combox
- combox的总结
- progstudio Combox 的问题
- Ext的Combox
- 似曾相识的Combox
- Ext的Combox
- combox的显示
- 可多选的combox
- COMBOX的基本使用
- 四、扩展的参数处理
- combox
- 51单片机扩展中断的四种方法
- GNU风格 ARM汇编语法指南(非常详细)5
- Chrome extension的manifest_version升级过程几个棘手问题的解决方法
- Linux中buffer/cache,swap,虚拟内存和page ++
- tomcat指定时区
- 使用ViewFlipper实现图片左右滑动效果
- combox的四种扩展
- 对DataTable(或者DataSet)修改后,提交修改到数据库
- [Institution or Company] Fidessa
- js日期输入框
- gSoap
- Oracle将int64转换成time
- 安装和使用Cloud Foundry命令行工具vmc
- 容易混淆的四个php文本函数strstr strrchr substr stristr
- Android瀑布流实例 android_waterfall