我在我的应用程序中有各种各样的(阅读大量..)flex表单,现在我想创建一个系统,通过这个系统通知用户他没有保存,如果他修改任何形式的东西...检测Flex表单元素(textinput,textarea,combobox,复选框..)的变化
现在..我不想重写每一个形式,我有..是否有一些不错的方式来实现这一点? 以某种方式扩展TextInput(和其他..)类?
感谢
我在我的应用程序中有各种各样的(阅读大量..)flex表单,现在我想创建一个系统,通过这个系统通知用户他没有保存,如果他修改任何形式的东西...检测Flex表单元素(textinput,textarea,combobox,复选框..)的变化
现在..我不想重写每一个形式,我有..是否有一些不错的方式来实现这一点? 以某种方式扩展TextInput(和其他..)类?
感谢
这不是真的想通过,但应该工作。
您可以创建一个自定义组件,我们称之为FormWatcher,然后将它放在您的Form旁边。表单观察者要做的是等待表单中的CreationComplete事件。
所以,现在,我们已经准备好了Form,您可以使用表单的getChildren()方法来获取其中的所有FormItems。比他们每个人看,你会得到TextInputs,Comboboxes等,您可以添加事件监听器(作为单个组件),例如。
// 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将有一个布尔VAR称为“干净”什么的。
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>
你可以进入TextInput类(及其他),并添加事件侦听器和函数,但你会改变SDK本身,这是怎样的一个坏主意。我会创建自定义的类来扩展你使用的类并做一个查找/替换以使其更快。