Flex checkbox

<!--header-->
<?xml version="1.0" encoding="utf-8"?>
<mx:HBox xmlns:mx="http://www.adobe.com/2006/mxml" width="100%" height="100%" horizontalAlign="center" preinitialize="init()" implements="mx.core.IFactory">
<mx:Script>
<![CDATA[
import common.checkbox.events.SimpleHeaderClickEvent;
import mx.controls.DataGrid;
import mx.binding.utils.BindingUtils;

//will be set by "properties" property of ClassFactory
//allows us to bind to an external value while remaining decoupled
public var externalObject:*;
public var externalPropertyName:String;
public var dataGridObject:DataGrid;

//local property that will be bound to external value held in externalObject[externalPropertyName]
//CheckBox's selected property in turn bound to this
[Bindable]
public var isSelected:Boolean = false;

//method required by IFactory
public function newInstance():*{
return new GenericCheckBoxHeaderRenderer();
}

//set up binding of local property to value specified by ClassFactory::properties
private function init():void{
BindingUtils.bindProperty(this,"isSelected",externalObject,externalPropertyName);

this.parentApplication.addEventListener(SimpleHeaderClickEvent.EXT_CLICK,function(event:SimpleHeaderClickEvent):void{
event.cb = t_cb;
event.itemObjectList = dataGridObject.dataProvider;
event.cb.selected = event.allSelected;
onClick(new MouseEvent(MouseEvent.CLICK));
});
}

//local click handler that dispatches the event
//so it can be handled in a more appropriate place (such as the document holding the DataGrid)
public function onClick(event:MouseEvent):void{
var evt:SimpleHeaderClickEvent = new SimpleHeaderClickEvent(SimpleHeaderClickEvent.CLICK,
t_cb,dataGridObject.dataProvider);
onHeaderClick(evt);

// 将checkbox状态改变的事件通知出去
dispatchEvent(evt);
}

//单击DataGridHeader事件
private function onHeaderClick(event:SimpleHeaderClickEvent):void{
//更新属性
isSelected = externalObject.allSelected = event.cb.selected;
var theData:* = dataGridObject.dataProvider;

if(theData != null){
for each(var resultObj:* in theData){
resultObj.isSelected = isSelected;
}
theData.refresh();
}
}
]]>
</mx:Script>
<mx:CheckBox id="t_cb" click="onClick(event)" selected="{isSelected}" width="15"/>
</mx:HBox>

<!--Item -->
<?xml version="1.0" encoding="utf-8"?>
<mx:HBox xmlns:mx="http://www.adobe.com/2006/mxml" width="100%" height="100%" horizontalAlign="center"
implements="mx.core.IFactory" preinitialize="init()">
<mx:Script>
<![CDATA[
import common.checkbox.events.SimpleItemClickEvent;
import mx.controls.DataGrid;
import mx.charts.renderers.BoxItemRenderer;
import mx.controls.dataGridClasses.DataGridColumn;

/**
* 该checkbox的惟一标识的名字
*/
public var dnField:*;

//name of property on our VO we're concerned with
public var dataField:String;

// DataGrid
public var dataGridObject:DataGrid;

//method required by IFactory
public function newInstance():*{
return new GenericCheckBoxItemRenderer();
}

private function init():void{
// 监视外部命令
this.parentApplication.addEventListener(SimpleItemClickEvent.EXT_CLICK,function(event:SimpleItemClickEvent):void{
var dn:* = data[dnField];
if(dn != null && dn == event.dn){
// event.stopImmediatePropagation();
t_cb.selected = true;
onClick(new MouseEvent(MouseEvent.CLICK));
}
});
}

//this override is essential for preventing random (un)checking when your DataGrid is scrolled
override public function set data(value:Object):void{
//not sure of the details on when or why, but sometimes this method is passed a null value
if(value != null) {
super.data = value;
//the parent DataGridColumn is passed as value before the real data arrives
if(!(value is DataGridColumn)){
//set itemRenderer's state based on the value held in the property specified by _dataField
t_cb.selected = value[dataField];
}

var evt:SimpleItemClickEvent = new SimpleItemClickEvent(SimpleItemClickEvent.DATA_INIT,super.data,dataField,t_cb);

// 将checkbox状态初始化的事件通知出去
dispatchEvent(evt);
}
}

//local click handler that dispatches the event
//so it can be handled in a more appropriate place (such as the document holding the DataGrid)
private function onClick(event:MouseEvent):void{
//attach our VO and _dataField onto the event so that it can be manipulated in the handler
//wherever that handler may be
var evt:SimpleItemClickEvent = new SimpleItemClickEvent(SimpleItemClickEvent.CLICK,super.data,dataField);
super.data[dataField] = t_cb.selected;

// 将checkbox状态改变的事件通知出去
dispatchEvent(evt);
}

//捕获单击DataGrid's itemRenderer中的CheckBox事件
/*private function onItemClick(event:SimpleItemClickEvent):void{
//创建当前点击的GenericCheckBoxItemRenderer对象
var ir:GenericCheckBoxItemRenderer = event.target as GenericCheckBoxItemRenderer;
var cb:CheckBox = ir.t_cb as CheckBox;

//更新对象属性值成CheckBox选择装态
event.itemObject[event.itemPropName] = cb.selected;

if(callbackFun != null){
callbackFun(event);
}
}*/
]]>
</mx:Script>
<mx:CheckBox id="t_cb" click="onClick(event)" width="15"/>
</mx:HBox>

<!--headerEvent -->
package common.checkbox.events
{
import flash.events.Event;

import mx.controls.CheckBox;

//simple event that can hold a Person and a property name
public class SimpleHeaderClickEvent extends Event
{
public static var CLICK:String = "checkBoxHeaderClick";
public static var EXT_CLICK:String = "checkExtBoxHeaderClick";

// Checkbox对象
public var cb:CheckBox;

// 数据源
public var itemObjectList:*;

//Select
public var allSelected:Boolean;

public function SimpleHeaderClickEvent(type:String, cb:CheckBox, itemObjectList:*){
super(type,true,true);
this.cb = cb;
this.itemObjectList = itemObjectList;
}
}
}

<!--ItemEvent -->
package common.checkbox.events
{
import flash.events.Event;

import mx.controls.CheckBox;

//simple event that can hold a Person and a property name
public class SimpleHeaderClickEvent extends Event
{
public static var CLICK:String = "checkBoxHeaderClick";
public static var EXT_CLICK:String = "checkExtBoxHeaderClick";

// Checkbox对象
public var cb:CheckBox;

// 数据源
public var itemObjectList:*;

//Select
public var allSelected:Boolean;

public function SimpleHeaderClickEvent(type:String, cb:CheckBox, itemObjectList:*){
super(type,true,true);
this.cb = cb;
this.itemObjectList = itemObjectList;
}
}
}

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值