Это не совсем продумано, но должно работать.
Вы можете создать пользовательский компонент, назовем его FormWatcher, который вы бы поместили рядом с вашей формой.Наблюдатель за формой будет ждать события CreationComplete из формы.
Итак, теперь, когда у нас есть готовая форма, вы можете использовать метод getChildren () формы, чтобы получить все FormItems.Затем загляните внутрь каждого из них, и вы получите TextInputs, Combobox и т. Д., К которым вы можете добавить прослушиватели событий (как отдельные компоненты), например.
// THIS IS WHERE THE COMPONENT SHOULD START
protected function changeHandler(event:Event):void
{
trace ("something is dirty");
}
protected function startWatching(passTheFormHere:Form):void
{
for each (var O:Object in passTheFormHere.getChildren())
{
if (O is FormItem)
{
// Let's assume you only have a single child in one FormItem
// and always one child for simplicity
addChangeHandlerFor((O as FormItem).getChildAt(0));
}
}
}
protected function addChangeHandlerFor(someComponent:Object):void
{
// Most regular flex components send a Event.CHANGE event
// when their value is changing
// keep in mind you should check stuff, this is a simple example
(someComponent).addEventListener(Event.CHANGE,changeHandler);
}
// THIS IS WHERE THE COMPONENT SHOULD END
Просто вставьте этот код рядом с какой-либо формой,и вызовите startWatching (nameOfYourForm), вы должны увидеть, что вызывается changeHandler.
Еще несколько замечаний:
1) После завершения вы должны очистить прослушиватели событий.
2) Я бы создал из него компонент, чтобы вы могли использовать его следующим образом:
<mx:Form id="form1" >
[...]
</mx:Form>
<FormWatcher form="{form1}" />
Где у FormWatcher будет логический переменный с именем «clean» или что-то в этом роде.
3) Пример очень прост, поэтому он будет работать только для форм, похожих на этот:
<mx:Form id="myForm" >
<mx:FormItem>
<mx:TextInput id="someComponent1" />
</mx:FormItem>
<mx:FormItem>
<mx:CheckBox id="someComponent2" />
</mx:FormItem>
<mx:FormItem>
<mx:TextArea id="someComponent3" />
</mx:FormItem>
</mx:Form>