`

FLEX下拉多选框

    博客分类:
  • FLEX
阅读更多

自己封装的下拉多选:

<?xml version="1.0" encoding="utf-8"?>
<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="init()">
	<mx:Script>
		<![CDATA[
			import mx.controls.List;
			import mx.collections.ArrayCollection;
			import CheckBoxItemRenderer;
			
			private var _seletedItems:Array;
			private var list:List;
			public var comboData:ArrayCollection;
			
			private function init():void
			{
				this.addEventListener(MouseEvent.MOUSE_OVER, addPopUp);
				createCombo();
			}
			
			public function set seletedItems(value:Array):void
			{
				_seletedItems = value;
				
				if(list)
				{
					var items:ArrayCollection = list.dataProvider as ArrayCollection;
					for each(var obj:Object in items)
					{
						if(_seletedItems.indexOf(obj["value"]) != -1)
						{
							obj["checked"] = true;
						}
						else
						{
							obj["checked"] = false;
						}
					}
					showSeleted();
				}
			}
			
			public function get seletedItems():Array
			{
				if(list)
				{
					var items:ArrayCollection = list.dataProvider as ArrayCollection;
					var seletedItems:Array = [];
					for each(var obj:Object in items)
					{
						if(obj["checked"] && "" != obj["value"])
						{
							seletedItems.push(obj["value"]);
						}
					}
					_seletedItems = seletedItems;
				}
				return _seletedItems;
			}
			
			private function createCombo():void
			{
				if(null != comboData)
				{
					var dataSource:ArrayCollection = new ArrayCollection();
					for each(var item:Object in comboData)
					{
						dataSource.addItem({label:item.label,value:item.data,checked:false});
					}
					list = new List();
					list.dataProvider = dataSource;
					list.itemRenderer = new ClassFactory(CheckBoxItemRenderer);
					list.rowCount = 5;
					list.width = width;
					addPopUp();
					showSeleted();
				}
			}
			
			private function showSeleted():void
			{
				if(list)
				{
					var items:ArrayCollection = list.dataProvider as ArrayCollection;
					var seletedItems:Array = [];
					for each(var obj:Object in items)
					{
						if(obj["checked"] && "" != obj["value"])
						{
							seletedItems.push(obj["label"]);
						}
					}
					multiCombo.label = seletedItems.length > 0?seletedItems.toString():"请选择";
					multiCombo.toolTip = multiCombo.label;
				}
			}
			
			private function addPopUp(e:MouseEvent=null):void
			{
				if(null == multiCombo.popUp && null != list)
				{
					var can:Canvas = new Canvas();
					can.addChild(list);
					multiCombo.popUp = can;
				}
			}
		]]>
	</mx:Script>
	
	<mx:PopUpButton id="multiCombo" label="请选择" width="{width}" textAlign="left" fontWeight="normal"
		openAlways="true" close="showSeleted()"/>
</mx:Canvas>

 

 

 

下面在别的地方引入:

<common:MultiComboBox id="multiCombo2" width="150" comboData="{mnpStatus}"/>

 comboData为数据源

取值:

var arraySelected:Array = multiCombo.seletedItems as Array;

 

分享到:
评论
2 楼 zx.peng 2012-03-08  
大哥,请教一下...

下面在别的地方引入:(在什么地方、怎么引入啊?)
<common:MultiComboBox id="multiCombo2" width="150" comboData="{mnpStatus}"/>

放在代码中报一下错误:
The prefix "common" for element "common:MultiComboBox" is not bound.

码中第70行有以下错误。
70. list.itemRenderer = new ClassFactory(CheckBoxItemRenderer);
1120: 访问的属性 CheckBoxItemRenderer 未定义。 
不知道啥原因,请指教...
1 楼 elvislee030 2011-11-28  
试试去,正好要找这个组件。。先谢过

相关推荐

Global site tag (gtag.js) - Google Analytics