我在我的應用程序中有各種各樣的(閱讀大量..)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本身,這是怎樣的一個壞主意。我會創建自定義的類來擴展你使用的類並做一個查找/替換以使其更快。