Я хочу расширить элемент управления DropDownList, чтобы включить параметр для создания или редактирования параметров. Например; для списка проектов в раскрывающемся списке будет другой вариант с надписью «Создать новый проект ...» или «Редактировать проекты ...», и это будет последний параметр в списке. Когда пользователь выбирает эту опцию, selectedIndex или selectedItem не изменятся, и будет выполнено соответствующее действие (например, всплывающее окно). Это будет удобный способ для конечного пользователя.
Теперь я хочу, чтобы это работало независимо от контекста, и класс должен использоваться повторно. Пользователь будет указывать только 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;
}
}
Я надеюсь, что мой код понятен, я добавляю дополнительный объект к провайдеру данных для этой опции. Имена полей говорят сами за себя.
Теперь мой вопрос: как узнать, изменились ли элементы поставщика данных? Какие функции я должен переопределить и как это сделать. Я пытался использовать ChangeWatcher для просмотра свойства длины поставщика данных, но он не работает, если изменился только объект в поставщике данных. Мне нужно зафиксировать эти изменения и обновить вид.
Мне также нужно захватить функцию выбора и вызова optionFunction, предотвращая действие по умолчанию, чтобы не выдавать ошибку индекса за пределами границ.
Спасибо заранее.