The following example will show you how you can use a CheckBox control as a custom item renderer in a List control in Flex.
I haven’t done a lot of testing yet, so if you have any tips/suggestions/improvements, please, share them in the comments
View ListItemValueObject.as
I haven’t done a lot of testing yet, so if you have any tips/suggestions/improvements, please, share them in the comments
<?
xml version="1.0" encoding="utf-8"
?>
<!-- http://blog.flexexamples.com/2008/01/27/using-a-checkbox-control-as-a-list-item-renderer-in-flex/ -->
< mx:Application xmlns:mx ="http://www.adobe.com/2006/mxml"
xmlns:vo ="*"
layout ="horizontal"
verticalAlign ="middle"
backgroundColor ="white"
creationComplete ="init();" >
< mx:Script >
<![CDATA[
import mx.events.CollectionEvent;
import mx.utils.ObjectUtil;
private function init():void {
arrColl.dispatchEvent(new CollectionEvent(CollectionEvent.COLLECTION_CHANGE));
}
private function arrColl_collectionChange(evt:CollectionEvent):void {
try {
var tArr:Array = arrColl.source.filter(selectedOnly);
textArea.text = ObjectUtil.toString(tArr);
lbl.text = tArr.length.toString() + " item(s) selected";
} catch (err:Error) {
// ignore.
}
}
private function selectedOnly(item:ListItemValueObject, idx:uint, arr:Array):Boolean {
return item.isSelected;
}
]]>
</ mx:Script >
< mx:Array id ="arr" >
< vo:ListItemValueObject label ="One" isSelected ="true" />
< vo:ListItemValueObject label ="Two" isSelected ="true" />
< vo:ListItemValueObject label ="Three" isSelected ="true" />
< vo:ListItemValueObject label ="Four" isSelected ="true" />
< vo:ListItemValueObject label ="Five" isSelected ="false" />
< vo:ListItemValueObject label ="Six" isSelected ="false" />
< vo:ListItemValueObject label ="Seven" isSelected ="false" />
< vo:ListItemValueObject label ="Eight" isSelected ="false" />
< vo:ListItemValueObject label ="Nine" isSelected ="false" />
< vo:ListItemValueObject label ="Ten" isSelected ="false" />
< vo:ListItemValueObject label ="Eleven" isSelected ="false" />
< vo:ListItemValueObject label ="Twelve" isSelected ="false" />
</ mx:Array >
< mx:ArrayCollection id ="arrColl"
source ="{arr}"
collectionChange ="arrColl_collectionChange(event);" />
< mx:Panel id ="panel"
title ="Items"
status ="{arrColl.length} total"
styleName ="opaquePanel" >
< mx:List id ="list"
dataProvider ="{arrColl}"
alternatingItemColors ="[#EEEEEE, white]"
width ="150"
rowCount ="8" >
< mx:itemRenderer >
< mx:Component >
< mx:CheckBox selectedField ="isSelected"
change ="onChange(event);" >
< mx:Script >
<![CDATA[
private function onChange(evt:Event):void {
data.isSelected = !data.isSelected;
}
]]>
</ mx:Script >
</ mx:CheckBox >
</ mx:Component >
</ mx:itemRenderer >
</ mx:List >
< mx:ControlBar horizontalAlign ="right" >
< mx:Label id ="lbl" />
</ mx:ControlBar >
</ mx:Panel >
< mx:TextArea id ="textArea"
verticalScrollPolicy ="on"
width ="100%"
height ="{panel.height}" />
</ mx:Application >
<!-- http://blog.flexexamples.com/2008/01/27/using-a-checkbox-control-as-a-list-item-renderer-in-flex/ -->
< mx:Application xmlns:mx ="http://www.adobe.com/2006/mxml"
xmlns:vo ="*"
layout ="horizontal"
verticalAlign ="middle"
backgroundColor ="white"
creationComplete ="init();" >
< mx:Script >
<![CDATA[
import mx.events.CollectionEvent;
import mx.utils.ObjectUtil;
private function init():void {
arrColl.dispatchEvent(new CollectionEvent(CollectionEvent.COLLECTION_CHANGE));
}
private function arrColl_collectionChange(evt:CollectionEvent):void {
try {
var tArr:Array = arrColl.source.filter(selectedOnly);
textArea.text = ObjectUtil.toString(tArr);
lbl.text = tArr.length.toString() + " item(s) selected";
} catch (err:Error) {
// ignore.
}
}
private function selectedOnly(item:ListItemValueObject, idx:uint, arr:Array):Boolean {
return item.isSelected;
}
]]>
</ mx:Script >
< mx:Array id ="arr" >
< vo:ListItemValueObject label ="One" isSelected ="true" />
< vo:ListItemValueObject label ="Two" isSelected ="true" />
< vo:ListItemValueObject label ="Three" isSelected ="true" />
< vo:ListItemValueObject label ="Four" isSelected ="true" />
< vo:ListItemValueObject label ="Five" isSelected ="false" />
< vo:ListItemValueObject label ="Six" isSelected ="false" />
< vo:ListItemValueObject label ="Seven" isSelected ="false" />
< vo:ListItemValueObject label ="Eight" isSelected ="false" />
< vo:ListItemValueObject label ="Nine" isSelected ="false" />
< vo:ListItemValueObject label ="Ten" isSelected ="false" />
< vo:ListItemValueObject label ="Eleven" isSelected ="false" />
< vo:ListItemValueObject label ="Twelve" isSelected ="false" />
</ mx:Array >
< mx:ArrayCollection id ="arrColl"
source ="{arr}"
collectionChange ="arrColl_collectionChange(event);" />
< mx:Panel id ="panel"
title ="Items"
status ="{arrColl.length} total"
styleName ="opaquePanel" >
< mx:List id ="list"
dataProvider ="{arrColl}"
alternatingItemColors ="[#EEEEEE, white]"
width ="150"
rowCount ="8" >
< mx:itemRenderer >
< mx:Component >
< mx:CheckBox selectedField ="isSelected"
change ="onChange(event);" >
< mx:Script >
<![CDATA[
private function onChange(evt:Event):void {
data.isSelected = !data.isSelected;
}
]]>
</ mx:Script >
</ mx:CheckBox >
</ mx:Component >
</ mx:itemRenderer >
</ mx:List >
< mx:ControlBar horizontalAlign ="right" >
< mx:Label id ="lbl" />
</ mx:ControlBar >
</ mx:Panel >
< mx:TextArea id ="textArea"
verticalScrollPolicy ="on"
width ="100%"
height ="{panel.height}" />
</ mx:Application >
View ListItemValueObject.as
package {
public class ListItemValueObject {
[Bindable]
public var label:String;
[Bindable]
public var isSelected:Boolean;
public function ListItemValueObject() {
super();
}
}
}
public class ListItemValueObject {
[Bindable]
public var label:String;
[Bindable]
public var isSelected:Boolean;
public function ListItemValueObject() {
super();
}
}
}
本文转自 OldHawk 博客园博客,原文链接:http://www.cnblogs.com/taobataoma/archive/2008/01/31/1059338.html
,如需转载请自行联系原作者