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+"/";
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值