一个带过滤功能的combobox组件

AS代码如下:

package com.dfmcsoft.test
{
imp<wbr>ort</wbr> flash.events.Event;

imp<wbr>ort</wbr> mx.collections.ArrayCollection;
imp<wbr>ort</wbr> mx.controls.ComboBox;

public class FilterComboBox extends ComboBox
{
public function FilterComboBox()
{
super();
this.editable=true;
}

override
protected function textInput_changeHandler(event:Event):void{
super.textInput_changeHandler(event);
FilterByKey(event);
}

//过滤数据
private function FilterByKey(event:Event):void{
var tempDataProvider:ArrayCollection
= this.dataProvider as ArrayCollection;
if (tempDataProvider == null) return;
this.dataProvider.filterFunction = filterFunction;
var tempstr:String
= this.text;
if(tempDataProvider.refresh()){
this.dropdown.selectedIndex = -1;
this.dropdown.verticalScrollPosition = 0;
this.text = tempstr;
this.open();
this.textInput.setFocus();
this.textInput.setSelection(tempstr.length,tempstr.length);

}
}
private function filterFunction(item:Object):Boolean{
return item['label'].toString().indexOf(this.text)!=-1;
}

}

测试的MXML如下:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" xmlns:ns1="com.dfmcsoft.test.* " fontSize="13">
<mx:scriptt>
<![CDATA[
imp<wbr>ort mx.collections.ArrayCollection;<br> [Bindable]<br> public var cards:ArrayCollection = new ArrayCollection(<br> [ {label:"张一", da<wbr>ta:1}, <br> {label:"张二", da<wbr>ta:2}, <br> {label:"张三", da<wbr>ta:3},<br> {label:"李四一", da<wbr>ta:1},<br> {label:"李五一", da<wbr>ta:1},<br> {label:"王六二", da<wbr>ta:1} ]); <br> ]]&gt;<br> &lt;/mx:scriptt&gt;</wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<mx:Panel title="ComboBox Control Example"
height="75%" width="75%" layout="horizontal"
paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10">
<ns1:FilterComboBox x="57" y="130" dataProvider="{cards}"/>
</mx:Panel>

</mx:Application>

注意:数据源一定是集合数组类型的,我尝试用了<mx:XML>定义数据源,结果没好用!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值