项目中菜单树+复选框的需求,以为像平常的list控件加个itemrender就可以搞定,谁知道不是那么回事。果断baidu。看到有大神写过,果断看tree的源码,发现:
tree在构造函数中已经默认设置了一个itemrnederer。而且它的itemrenderer和其它的不太一样,包含三个部分:1. 打开/关闭按钮 2. 文件夹图标 3.文本框
解决方案:
复写tree的itemrender,源码如下:
package com.csms.view.renderers.design
{
import com.csms.model.vo.DrawingtypeVo;
import flash.events.Event;
import mx.binding.utils.BindingUtils;
import mx.collections.ArrayCollection;
import mx.controls.CheckBox;
import mx.controls.Tree;
import mx.controls.treeClasses.TreeItemRenderer;
import mx.controls.treeClasses.TreeListData;
public class TreeCheckBoxRenderer extends TreeItemRenderer
{
public function TreeCheckBoxRenderer()
{
super();
}
private var _selectedField:String = "selected";
protected var checkBox:CheckBox;
override protected function createChildren():void
{
super.createChildren();
if(!checkBox){
checkBox = new CheckBox();
addChild( checkBox );
checkBox.addEventListener(Event.CHANGE, changeHandler);
}
}
/**
* 复选框变化事件,绑定子级
* */
protected function changeHandler( event:Event ):void
{
trace(checkBox.selected);
if( data && data[_selectedField] != undefined )
{
data[_selectedField] = checkBox.selected;
trace("data[_selectedField]" + checkBox.selected);
bindChilren(data as DrawingtypeVo);
}
}
/**
* 复选框变化,改变数据源后,调用此方法,绑定父级
* */
override protected function commitProperties():void
{