目前项目中需要在List的Item切换前根据条件决定是否切换,在网上找到这样的思路:
自己实现的PreList基于List,代码如下:
<?xml version="1.0" encoding="utf-8"?> <mx:List xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" creationComplete="onComplete();"> <fx:Declarations> <!-- 将非可视元素(例如服务、值对象)放在此处 --> </fx:Declarations> <fx:Script> <![CDATA[ import mx.controls.Alert; import mx.events.CloseEvent; import mx.events.ListEvent; public var _lastIndex:Number = 0; public function onComplete():void { addEventListener(ListEvent.CHANGE,onChange); persistLastIndex(); } public function persistLastIndex():void { _lastIndex = selectedIndex; } public function onChange(e:ListEvent):void { Alert.show("Are you sure to change the item?","Alert",Alert.OK|Alert.CANCEL,null,onAlertClicked); } public function onAlertClicked(e:CloseEvent):void { if(Alert.OK == e.detail) { _lastIndex = selectedIndex; } else { selectedIndex = _lastIndex; } } ]]> </fx:Script> </mx:List>
使用自定义的PreList:
<?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:my="org.puremvc.as3.*" xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"> <fx:Declarations> <!-- 将非可视元素(例如服务、值对象)放在此处 --> </fx:Declarations> <mx:VBox id="dd"> <my:PreList> <my:dataProvider> <fx:Array> <fx:Object data="1" label="Value 1" /> <fx:Object data="2" label="Value 2" /> </fx:Array> </my:dataProvider> </my:PreList> </mx:VBox> </s:Application>