`

Flex comboBox checkbox

 
阅读更多
不知道是哪位前辈写的复选下拉框,拿来后,发现有点,并且不能满足自己的需求,加以修改后,应用到系统中。谢谢前辈,如果看到代码,不要骂我呀。。我是菜鸟。。

12月13号,测试代码后发现还是有很多错误。重新调试修改。应该没啥问题。哎。。。

as MyComboBox:

package Comp.component
{
	import flash.events.Event;
	import flash.events.MouseEvent;
	import mx.controls.Alert;
	import mx.controls.ComboBox;
	import mx.core.ClassFactory;
	import mx.events.FlexEvent;
	import mx.events.ListEvent;

	public class MyComboBox extends ComboBox{
		private var mouseOut:Boolean=true;
		[Bindable]
		private var promptText:String="";
		public function MyComboBox(){
			super();
			this.addEventListener(FlexEvent.CREATION_COMPLETE,onCreateCompleteHandle);
			this.itemRenderer=new ClassFactory(CheckBoxItemRenderer);
		}
		private function onCreateCompleteHandle(event:FlexEvent):void{
			dropdown.allowMultipleSelection=true;
			close();
		}
		private function initListener():void{
			if(!dropdown.hasEventListener(MouseEvent.ROLL_OVER))
				dropdown.addEventListener(MouseEvent.ROLL_OVER,onRollOverHandle);
			if(!dropdown.hasEventListener(MouseEvent.ROLL_OUT))
				dropdown.addEventListener(MouseEvent.ROLL_OUT,onRollOutHandle);
		}
		private function onRollOverHandle(event:MouseEvent):void{
			mouseOut=false;
		}
		private var changeEvent:ListEvent;
		private function onRollOutHandle(event:MouseEvent):void{
			mouseOut=true;
			var selectedStr:String = "";
			if(selectedItems.length>0){
				//赋值
				for each(var item:Object in selectedItems){
					if(item.selected == true){
					 	selectedStr += item.labelName+"/";
					}
                }
                this.promptText = selectedStr.substring(0,selectedStr.length -1) ;
				close();
				changeEvent= new ListEvent( ListEvent.CHANGE )
				dispatchEvent( changeEvent);
			}
		}
		
		public function set selectedItems(value:Array):void{
			if (dropdown)
				dropdown.selectedItems=value;
		}

		[Bindable("change")]
		public function get selectedItems():Array{
			return dropdown?dropdown.selectedItems:[];
		}
		
		public function set selectedIndices(value:Array):void{
			if (dropdown)
				dropdown.selectedIndices=value;
		}

		[Bindable("change")]
		public function get selectedIndices():Array{
			return dropdown?dropdown.selectedIndices:[];
		}
		
		override public function close(trigger:Event=null):void{
			initListener();
			if (mouseOut){
				super.close(trigger);
			}
			this.textInput.text=promptText;
			this.toolTip = promptText;
		}
		override public function set prompt(value:String):void{
			promptText=value;
		}
	}
}

as CheckBoxItemRenderer:
package Comp.component
{
	import flash.events.Event;
	
	import mx.controls.Alert;
	import mx.controls.CheckBox;
	import mx.controls.listClasses.ListBase;
	import mx.utils.ArrayUtil;
	
	public class CheckBoxItemRenderer extends CheckBox{
		
		/**存储当前列数据对象**/
		private var currData:Object; 
		
		public function CheckBoxItemRenderer(){
			super();
			this.addEventListener(Event.CHANGE,onClickCheckBox);
		}
		
		override public function set data(value:Object):void{
			this.selected = value.selected;
			this.currData = value; 
			this.label=value.labelName;
		}
		override public function set enabled(value:Boolean):void{
			if(currData){
				value=currData.enabled==false?false:true;
			}
			super.enabled=value;
		}
		private function onClickCheckBox(e:Event):void{	
			var listBase:ListBase = ListBase(listData.owner);
			var selectedItems:Array = listBase.selectedItems;
			currData.selected = this.selected;
			if(this.selected == true){
				selectedItems.push(currData);
			}else{
				selectedItems.splice(ArrayUtil.getItemIndex(currData,selectedItems),1);
			}
			listBase.selectedItems=selectedItems;
		}
	}
}
在mxml中调用。

<common:MyComboBox id="org" dataProvider="{properties_org}"  labelField="labelName" prompt="请选择部门" height="28" fontSize="12" width="146">
			 
			 </common:MyComboBox>


程序默认会选中第一条数据,故和后台交互时需要进行判断处理下:
as

var departid:String = "";
for each(var item:Object in org.selectedItems){
	if(item.selected == true){
		departid+=item.id+"/";
	}
}
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

Global site tag (gtag.js) - Google Analytics