我想擴展DropDownList控件以包含用於創建或編輯選項的選項。例如;對於下拉列表中的項目列表,會出現另一個選項「創建新項目...」或「編輯項目...」,這將是列表中的最後一個選項。當用戶選擇這個選項時,selectedIndex或selectedItem不會改變並且會採取相應的操作(例如彈出窗口出現)。這對於最終用戶來說是一個方便的途徑。擴展DropDownList以包含額外選項
現在我希望它獨立於上下文工作,並且類必須是可重用的。用戶只會指定optionText和optionFunction來解決這個問題。類的基本結構是這樣的:
public class OptiveDropDownList extends DropDownList
{
private var _enableOption:Boolean;
private var _optionText:String;
private var _originalDataProvider:IList;
[Bindable] public var optionFunction:Function;
public function OptiveDropDownList()
{
super();
}
public function set optionText(value:String):void
{
_optionText = value;
dataProvider = _originalDataProvider;
}
public function set enableOption(value:Boolean):void
{
_enableOption = value;
dataProvider = _originalDataProvider;
}
public override function set dataProvider(value:IList):void
{
_originalDataProvider = value;
var dp:IList = null;
if(!value){
dp=new ArrayCollection(value.toArray());
if(_enableOption){
var opt:Object=new Object();
opt[labelField]=_optionText;
dp.addItem(opt);
}
}
super.dataProvider = dp;
}
[Bindable]
public override function get dataProvider():IList
{
return _originalDataProvider;
}
}
我希望我的代碼是清楚的瞭解,我加入了一個額外的對象給dataProvider的選項。字段名稱是不言自明的。
現在我的問題是如何知道數據提供者的項目是否已經改變?我應該覆蓋哪些功能以及如何去做。我曾嘗試使用ChangeWatcher來觀察數據提供者的長度屬性,但如果只有數據提供者中的某個對象發生了更改,它將無法正常工作。我需要捕獲這些更改並更新視圖。
我還需要捕獲選擇和調用optionFunction,防止默認操作不給索引超出界限的錯誤。
在此先感謝。