• flex CheckBoxList


    代码
    /**
     * @author         
     * @date         2010-6-2
     * @description    多选控件 
     
    */
    package com.founder.szecp.components
    {
        import flash.events.Event;
        
        import mx.collections.ArrayCollection;
        import mx.collections.ICollectionView;
        import mx.collections.IList;
        import mx.collections.ListCollectionView;
        import mx.collections.XMLListCollection;
        import mx.containers.Tile;
        import mx.controls.Alert;
        import mx.controls.CheckBox;
        import mx.core.IUIComponent;
        import mx.core.Repeater;
        
        public class CheckBoxList extends Tile
        {                
            protected 
    var collection:ICollectionView;            //显示的数据源
            private var _labelField:String = "label";            //显示的数据字段
            private var _dataField : String = "";                //选中的状态
            private var _selectedName : String = "";            //设置选中的值
            private var _splitString : String = "";            //设置选中值的分割符
            private var cellWidth:Number;
            private 
    var cellHeight:Number;
            
            
    //数据源
            [Bindable("collectionChanged")]
            public 
    function get dataProvider():Object
            {
                
    return collection;
            }
            
               
            [Bindable(
    "collectionChanged")]
            public 
    function set dataProvider(value:Object):void
            {
                
    if (value is Array)
                {
                    collection 
    = new ArrayCollection(value as Array);
                }
                
    else if (value is ICollectionView)
                {
                    collection 
    lor: #000000;">= ICollectionView(value);
                }
                
    else if (value is IList)
                {
                    collection 
    = new ListCollectionView(IList(value));
                }
                
    else if (value is XMLList)
                {
                    collection 
    = new XMLListCollection(value as XMLList);
                }
                
    else
                {
                    
    // convert it to an array containing this one item
                    var tmp:Array = [value];
                    collection 
    = new ArrayCollection(tmp);
                }            
                
                dispatchEvent(
    new Event("collectionChanged"));
                addChildren();
            }
            
    //显示字段
            [Bindable("labelFieldChanged")]
            public 
    function get labelField():String
            {
                
    return _labelField;
            }
            
            public 
    function set labelField(value:String):void
            {
                _labelField 
    = value;
                dispatchEvent(
    new Event("labelFieldChanged"));
            }
            
            
    //设定选中的状态
            [Bindable("dataFieldChanged")]
            public 
    function get dataField() : String
            {
                
    return _dataField;
            }
            public 
    function set dataField(value : String) : void
            {
                _dataField 
    = value;
                dispatchEvent(
    new Event("dataFieldChanged"));
            }
            
    //设定选中的值
            [Bindable("selectedValueChanged")]
            public 
    function get selectedName() : String
            {
                
    var value : String = "";
                
    for each (var obj : Object in collection)
                {
                    
    if(obj[dataField] == "true")
                        value 
    += obj[labelField] + _splitString;
                }
                
    return value;
            }
            
            public 
    function set selectedName(value : String) : void
            {
                _selectedName
    = value;
                
    for each(var o : Object in collection)
                {
                    o[dataField] 
    = "false";
                }          
                
    if(value != null) setSelectedName();
                addChildren();            
                dispatchEvent(
    new Event("selectedValueChanged"));
            }
            
    //设定分割符
            [Bindable("splitStringChanged")]
            public 
    function get splitString() : String
            {
                
    return _splitString;    
            }
            
            public 
    function set splitString(value : String) : void
            {
                _splitString 
    = value;
                dispatchEvent(
    new Event("splitStringChanged"));
            }
            
            public 
    function CheckBoxList()
            {
                super();
            }        
            
            
    //新增子列表
            private function addChildren() : void
            {
                
    this.removeAllChildren();
                
    if(collection == nullreturn;
                
                
    for (var i : int =0; i < collection.length; i++)
                {
                       
    var cb : CheckBox = new CheckBox();
                       cb.selected
    = collection[i][dataField]=="true" ? true : false;
                    cb.label 
    = collection[i][labelField];                
                    addChild(cb);                
                }
            }
            
    //拿到当前选中的对象列表
            public function getSelectedArrary() : Array
            {
                
    var arr : Array = new Array();
                
    for each (var obj : Object in collection)
                {
                    
    if(obj[dataField] == "true")
                        arr.push(obj);
                }
                
    return arr;
            }
            
            protected override 
    function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void
            {
                super.updateDisplayList(unscaledWidth,unscaledHeight);
                findCellSize();
                
                
    if(numChildren<=0return ;            
                
    var horizontalGap:Number = getStyle("horizontalGap");
                
    var verticalGap:Number = getStyle("verticalGap");            
                
    var num : Number = Math.floor(width / (cellWidth + horizontalGap) );
                height 
    = Math.ceil((cellHeight + verticalGap) * Math.ceil(numChildren/num));            
            }

            private 
    function findCellSize():void
            {
                
    // If user explicitly supplied both a tileWidth and
                // a tileHeight, then use those values.
                var widthSpecified:Boolean = !isNaN(tileWidth);
                
    var heightSpecified:Boolean = !isNaN(tileHeight);
                
    if (widthSpecified && heightSpecified)
                {
                    cellWidth 
    = tileWidth;
                    cellHeight 
    = tileHeight;
                    
    return;
                }
        
                
    // Reset the max child width and height
                var maxChildWidth:Number = 0;
                
    var maxChildHeight:Number = 0;
                
                
    // Loop over the children to find the max child width and height.
                var n:int = numChildren;
                
    for (var i:int = 0; i < n; i++)
                {
                    
    var child:IUIComponent = IUIComponent(getChildAt(i));
        
                    
    if (!child.includeInLayout)
                        
    continue;
                    
                    
    var Number = child.getExplicitOrMeasuredWidth();
                    
    if (width > maxChildWidth)
                        maxChildWidth 
    = width;
                    
                    
    var height:Number = child.getExplicitOrMeasuredHeight();
                    
    if (height > maxChildHeight) 
                        maxChildHeight 
    = height;
                }
                
                
    // If user explicitly specified either width or height, use the
                // user-supplied value instead of the one we computed.
                cellWidth = widthSpecified ? tileWidth : maxChildWidth;
                cellHeight 
    = heightSpecified ? tileHeight : maxChildHeight;
            }
            
            private 
    function setSelectedName() : void
            {                    
                
    var arr : Array = _selectedName.split(_splitString);
                
                
    for each (var obj : Object in collection)
                {
                    
    for each(var str : String in arr)
                    {
                        
    if(obj[labelField]==str) 
                            obj[dataField] 
    = "true";
                    }
                }            
            }
        }

    }
     

     用于flex3下多选

    效果图

     

    <ns1:CheckBoxList id="cblLocationName"

      dataProvider="{instanceBiz.eventReportEvtLocationArr}"

      dataField="descrp"

      labelField="typeValue"  

                      width="100%"/> 

  • 相关阅读:
    对 Sea.js 进行配置 seajs.config
    jquery 设置style:display
    Js获取当前日期时间及其它操作
    2.4 js数组与字符串的转换 > 我的程序猿之路:第十四章
    2.3 js刷新页面所有 > 我的程序猿之路:第十三章
    2.2 HTML/JSP中控制按钮的显示和隐藏与单页面多列表 > 我的程序猿之路:第十二章
    2.1 字符串替换字符或字符设置为空 > 我的程序猿之路:第十一章
    1.9 23种设计模式之单例模式详情 > 我的程序猿之路:第九章
    1.8 Oracle 登陆时报错信息:无监听程序 > 我的程序猿之路:第八章
    1.7 Oracle 11g )impdp(数据泵)--导入dmp文件(全过程) > 我的程序猿之路:第七章
  • 原文地址:https://www.cnblogs.com/warrior/p/1753300.html
Copyright © 2020-2023  润新知