欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

基于Ext3.3的可多选下拉框 Extcombox下拉框可选 

程序员文章站 2024-02-18 12:48:16
...

在项目中需要可以多选的下拉框,经过研究最终得出了以下成果,特此标记

Ext.namespace("ycl.Widgets");
Wg = ycl.Widgets;
//范例
//var store = new Ext.data.ArrayStore({
//    fields: ['abbr', 'value'],
//    data : [['1','a'],['2','b'],['3','c']]
//});
//	combox = new Wg.MultiCombox({
//		store : store,
//		id : 'abbr',
//		name : 'value',
//		applyTo : 'test'
//		hiddenValue : '1,2,3'//初始化展示,选中值
//	});
//	combox.init(true);
//	alert(combox.getComboxValue());
//  <input type="text" id="test" size="20"/>
Wg.MultiCombox = function(_cfg) {
	Ext.apply(this, _cfg);
};
Ext.apply(
Wg.MultiCombox.prototype,
{
	init : function(_select) {//_select是否需要选择框
		var obj = this;
		var store = '';
		if(!obj.store){
			//如果store为空,创建后台store
			if(obj.url){
				Wg.alert('错误','缺少数据源');
				return;
			}
			url = obj.url;
			var index = [{name : 'name'}, {name : 'value'}];
			store = new Ext.data.JsonStore({
				autoLoad : true,
	            fields: index,
	            url : this.url//this.responseJson(response, list, false);
			},[]);
		}else
			store = obj.store;
		name = Ext.isEmpty(obj.name)?'name':obj.name;
		id = Ext.isEmpty(obj.id)?'value':obj.id;
		if(!obj.applyTo){
			Wg.alert('错误','下拉框缺少指向');
			return;
		}
		var applyTo = obj.applyTo;
		var tpl = '';
		if(_select){
			tpl = '<tpl for="."><div class="x-combo-list-item"><span><input type="checkbox" {[values.check?"checked":""]} value="{[values.'+id+']}"/></span><span>{'+name+'}</span></div></tpl>';
		}
		this.multiCombox = new Ext.form.ComboBox(
				{
					store : store,
					displayField : name,
					valueField : id,
					typeAhead : true,
					mode : 'local',
					triggerAction : 'all',
					selectOnFocus : true,
					emptyText:'请选择',
					applyTo : applyTo,
					editable : false,
					resizable : true,
					tpl : tpl,
					shadow : 'drop',
					onSelect : function(record, index) {
						if (this.fireEvent('beforeselect',
								this, record, index) !== false) {
							var strkey = [];
							var strvalue = [];
							if(_select){
								record.set('check', !record
										.get('check'));
								this.store.each(function(rc) {
									if (rc.get('check')) {
										strkey.push(rc.get(id));
										strvalue.push(rc.get(name));
									}
								});
							}else{
								strkey.push(record.get(id));
								strvalue.push(record.get(name));
							}
//							this.setValue(strkey.join());
							obj.hiddenValue = strkey.join();
//							this.value = strvalue.join();
							Ext.getDom(applyTo).value = strvalue.join();
							this.fireEvent('select', this,
									record, index);
						}
					},
					listeners : {"expand" : function(){//在展开时根据默认值选中项
						if(obj.hiddenValue){
							hiddenValue = obj.hiddenValue.split(',');
							store.each(function(rc) {
								for(var i=0;i<hiddenValue.length;i++){
									var eares = hiddenValue[i];
									if (rc.get(id) == eares) {
										rc.set('check', true);
									}
								}
							});
						}
					}}
				});
		if(obj.hiddenValue){//初始化默认展示值
			hiddenValue = obj.hiddenValue.split(',');
			var strvalue = [];
			store.each(function(rc) {
				for(var i=0;i<hiddenValue.length;i++){
					var eares = hiddenValue[i];
					if (rc.get(id) == eares) {
						strvalue.push(rc.get(name));
					}
				}
			});
			Ext.getDom(applyTo).value = strvalue.join();
		}
	},
	getComboxValue : function() {
		return this.hiddenValue;
	}
});
Ext.QuickTips.init();