[英]Flex Combobox preChange event
我有一個項目,需要在更改組合框值之前向用戶彈出警報。 如果未保存修改,此功能將允許用戶保持當前狀態。 這意味着用戶將能夠取消更改。
我對ComboBox進行了子類化,並嘗試掛接ComboBox.dropdown的ITEM_CLICK,但更改該值后會觸發此事件。 另外,我嘗試了MOUSE_CLICK和MOUSE_DOWN,但沒有成功。
在我的代碼中,我向CustomComboBox添加了“ preChange”事件。 進行更改之前應觸發此事件。 另外,我介紹了一種稱為commitChange的方法,該方法將被手動調用以實際提交更改。
如何獲得理想的結果?
這是我的方法:
<?xml version="1.0" encoding="utf-8"?>
<mx:ComboBox xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="onComplete();">
<mx:Script>
<![CDATA[
import mx.events.CloseEvent;
import mx.controls.Alert;
import mx.events.ListEvent;
private function onComplete():void {
addEventListener(ListEvent.CHANGE, onChange);
persistLastIndex();
}
private var _lastIndex:Number = 0;
private function persistLastIndex():void {
_lastIndex = selectedIndex;
}
private function onChange(event:ListEvent):void {
Alert.show("Are you sure you want to change the selection?", "", Alert.YES|Alert.NO, null, onAlertClicked);
}
private function onAlertClicked(event:CloseEvent):void {
if ( event.detail == Alert.NO ) {
selectedIndex = _lastIndex;
} else {
_lastIndex = selectedIndex;
}
}
]]>
</mx:Script>
</mx:ComboBox>
並稱之為:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
xmlns:rad="uk.co.rad.*">
<rad:MyComboBox>
<rad:dataProvider>
<mx:Array>
<mx:Object data="1" label="Value 1" />
<mx:Object data="2" label="Value 2" />
</mx:Array>
</rad:dataProvider>
</rad:MyComboBox>
</mx:Application>
希望這可以幫助。
基本上,在進行更改之前,我需要一個事件。 我想現在就可以了...
我確實修改了您的代碼,以使其在發生更改時觸發preChange事件,停止事件傳播,並且只有在真正使更改發生后才觸發CHANGE事件..
感謝您的迅速答復。
最簡單的方法是在ComboBox的Event.CHANGE上添加兩個偵聽器,然后將要在更改之前觸發的處理程序的優先級設置為負值。 例如:
myComboBox.addEventListener(Event.CHANGE, preChange, false, -100);
myComboBox.addEventListener(Event.CHANGE, postChange, false, 100);
事件調度的順序:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.