1. 程式人生 > >一個很簡單的過濾下拉框

一個很簡單的過濾下拉框

  Java程式碼 複製程式碼 收藏程式碼
  1. <?xml version="1.0" encoding="utf-8"?>      
  2. <mx:ComboBox xmlns:mx="http://www.adobe.com/2006/mxml" enter="toggleFilter(event)" editable="true">      
  3. <mx:Script>      
  4.     <![CDATA[      
  5. import com.eshangrao.util.ObjectKeyMap;       
  6. import mx.events.FlexEvent;      
  7. import mx.collections.ArrayCollection;      
  8. //需要2個重要引數1.dataprovider:arrcoll 2.item.name的這個過濾屬性    
  9. private var _labelName:String = "labelName";       
  10. public function set labelName( value:String ) : void
  11.         {       
  12.                  _labelName = value;       
  13.                  invalidateProperties();       
  14.         }       
  15. public function get labelName() : String      
  16.         {       
  17. return _labelName;       
  18.         }      
  19. private function toggleFilter(event:FlexEvent):void{      
  20. //trace(this.text);   
  21. //trace(event.currentTarget.text);   
  22. if (event.currentTarget.text!="") {      
  23. //var filtStr:String=event.currentTarget.text;   
  24. this.dataProvider.filterFunction = processFilter;      
  25.             } else {      
  26. this.dataProvider.filterFunction = null;      
  27.             }      
  28. this.dataProvider.refresh();      
  29.             }      
  30. private function processFilter(item:Object):Boolean {      
  31. //trace((String)(item.name));   
  32. //trace((String)(item["name"]));   
  33. return ((String)(item[_labelName])).indexOf(this.text)==0;      
  34.             }      
  35.     ]]>      
  36. </mx:Script>      
  37. </mx:ComboBox>    
<?xml version="1.0" encoding="utf-8"?>   
<mx:ComboBox xmlns:mx="http://www.adobe.com/2006/mxml" enter="toggleFilter(event)" editable="true">   
<mx:Script>   
    <![CDATA[   
        import com.eshangrao.util.ObjectKeyMap;    
        import mx.events.FlexEvent;   
        import mx.collections.ArrayCollection;   
           
        //需要2個重要引數1.dataprovider:arrcoll 2.item.name的這個過濾屬性    
        private var _labelName:String = "labelName";    
        public function set labelName( value:String ) : void    
        {    
                 _labelName = value;    
                 invalidateProperties();    
        }    
        public function get labelName() : String   
        {    
                 return _labelName;    
        }   
       
        private function toggleFilter(event:FlexEvent):void{   
            //trace(this.text);   
            //trace(event.currentTarget.text);   
            if (event.currentTarget.text!="") {   
                //var filtStr:String=event.currentTarget.text;   
                this.dataProvider.filterFunction = processFilter;   
            } else {   
                this.dataProvider.filterFunction = null;   
            }   
                this.dataProvider.refresh();   
            }   
        private function processFilter(item:Object):Boolean {   
            //trace((String)(item.name));   
            //trace((String)(item["name"]));   
            return ((String)(item[_labelName])).indexOf(this.text)==0;   
            }   
       
    ]]>   
</mx:Script>   
</mx:ComboBox>  

第一次寫,很簡單的。過濾條件也很簡單,沒用到正則表示式。(懶的去查資料),item[_labelName]這個動態獲取屬性的方法很重要,多虧了網友的幫助。